Kezdőoldal » Számítástechnika » Programozás » Programozási tételekben mi a...

Programozási tételekben mi a hiba? Rosszul írja ki az eredményt

Figyelt kérdés

Sziasztok!


Épp emelt szintű infó érettségire készülök és a programozási tételeket csinálom. De elakadtam bennük, mert az eredményt nem jól adja ki. C programozási nyelvet használok.


Meg tudjátok mondani, mi a hiba?


A tulajdonságot így határoztam meg:


bool tul(int szam){

(szam % 2)==0;

}



Megszámlálás:


int megszamlal(int n,int szamok[],int db){

db=0;

for(int i=1;i=n;i++){

if (tul(szamok[i])){

db++;

}

}

cout<<db;

return db<n;

}



Döntés:


bool dontes(int n,int szamok[],int talalt){

int i=1;

while(i<n and !tul(szamok[i])){

i++;

}

if (i=1){

cout<<"van a feltetelnek megfelelo elem";

}else{

cout<<"nincs a feltetelnek megfelelo elem";

}

return i<n;



Kiválasztás:


int kivalasztas(int n, int szamok[], int sorszam){

sorszam=1;

while (! tul(szamok[sorszam])){

sorszam++;

}

return sorszam<n;

}


A tömbben 1-10ig vannak sorba a számok az egyszerűség kedvéért.



2012. aug. 2. 09:42
1 2
 1/12 anonim ***** válasza:

Sorban:


1. tul


- C-ben nincs bool

- ha nem void a függvény, akkor adjon vissza valami értéket


2. megszamlal


- sima függvényparaméternek adsz értéket. lehet, de a függvényen kívül nem érvényesül

- C-ben for ciklus fejlécében nem definiálunk ciklusváltozót

- C-ben nincs cout<<, legyen printf

- nem igazán érthető, hogy mit akar visszaadni a függvény. ha db kisebb n-nél, akkor 1-et ad vissza, ha nem kisebb, akkor 0-át


3. dontes


- C-ben még mindig nincs cout<<

- a visszatérés megint nem tiszta


4. kivalasztas


- ha nincs a feltételnek megfelelő szám a listában, akkor végtelen ciklusba kerülsz. ide inkább for kéne.

- megint egy logikai értéket adsz vissza, pedig gondolom, hogy a sorszámot akarnád, nemde?


---------------


A paraméterlistákat is megkérdőjelezném a függvényekben így látatlanban, mert szerintem vannak ott felesleges dolgok, de lévén, hogy nem ismerem a feladat pontos kiírását, nem biztos, hogy igazam van.

2012. aug. 2. 10:16
Hasznos számodra ez a válasz?
 2/12 zsomkovacs ***** válasza:

1) bool tul(int n){return ((n%2)==0);}


2) A C nem 0-tól indexeli a tömböket? /ebben nem vagyok biztos/


3) A megszamlal miért int-et ad vissza, ha a return-ben db<n van?


4) A for ciklus feltételen i<n, nem i=n, főleg hogy utóbbi értékadás.


5) Az eldöntés feltétele i<n. Egyenlőséget meg az == ellenőriz. Az i=1 mindig igaz.


6) a cout c++, nem c. A c++ viszont garantáltan 0-tól indexeli a tömböket. A ciklusváltozók 0-tól induljanak, i<n feltétellel.


7) A talalt változót nem is használod. A típusa bool kéne, hogy legyen.


8) A tömböket illik const-ként (esetleg cím szerint átadni). A kimenetnek használt változóknak hivatkozásnak kell lenniük.


9) Ha használsz kimeneti változót és a kiírást is függvényen belül csinálod, akkor miért nem void-nak deklarálod a függvényeid? Fölösleges a return.


10) A kivalaszt megint int-nek lett deklarálva, a return meg bool-t ad.


Nem bántásból mondom, de szerintem ne C++-al érettségizz. Inkább javasolnám a Pascalt. Minden programot ugyanúgy megírsz benne az érettségin, csak a hibáid fele fel sem merülne. A C++ sokkal nehezebb nyelv.

2012. aug. 2. 10:22
Hasznos számodra ez a válasz?
 3/12 zsomkovacs ***** válasza:

#1: a kiválasztásnál valóban végtelen ciklus lenne, ha nem lenne olyan elem. DE! A kiválasztás tételének előfeltétele, hogy biztosan van megfelelő elem. Ha ezt nem tudnánk, akkor a lineáris keresés tételét használnánk, ahol tényleg ellenőrizni kell, de az másik tétel. Ezt éppen a kérdező jól csinálta.


A többi ponttal amúgy egyetértek.

2012. aug. 2. 10:25
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
A C is egészen biztos, hogy 0-ától indexel.
2012. aug. 2. 10:30
Hasznos számodra ez a válasz?
 5/12 A kérdező kommentje:

A kód "magyarul" megvan lapon, de nem tudom pontosan, hogy kell átírni.

kb. 1 évig Pascalban programoztam, de a felkészítőtanárom (aki adta a lapokat) inkább a c++-t ajánlotta, mert ezt használják a legtöbb helyen

2012. aug. 2. 11:49
 6/12 A kérdező kommentje:

Így néz ki a program vége ,ahol a eredményeket kellene visszaadni. A tömböt is itt töltöttem fel.


int main()

{

int n=10;

int szamok[]= {1,2,3,4,5,6,7,8,9,10};

int talalt,sorszam,db;


cout<<dontes(n,szamok,talalt)<<endl;

cout<<kivalasztas<<". elem a megoldas"<<endl;

cout<<"Ennyi elem fele meg a feltetelnek: "<<megszamlal(n,szamok,db)<<endl;



cout << endl;

return 0;

}

2012. aug. 2. 11:53
 7/12 zsomkovacs ***** válasza:
100%
Igen, a gyakorlatban ezt használják. De majd egyetemen megtanulod. Ez egy érettségi. Nem az a célja, hogy a munkapiaci igényeknek megfelelően csináld, hanem hogy minél jobban sikerüljön. Persze ha ezt akarod, oké, de akkor kezdj neki a nyelv logikájának és működésének megértéséhez, mert akár gyakran használt nyelv, akár nem, az érettségin nem értékelik a nem működő programokat.
2012. aug. 2. 11:55
Hasznos számodra ez a válasz?
 8/12 zsomkovacs ***** válasza:

Nah. Úgy látom, hogy ezeket függvényként akartak eredetileg, de nálad itt már minden keveredik.


3 lehetőséged van.


1) a tételeket függvényként csinálod meg. Ekkor csak a bemenő adatok a paraméterek (talalt meg hasonlók nincsenek). A megszámlálás és a kiválasztás int-et ad vissza, a döntés bool-t. (bool-t ne írass cout-ra, if-fel szét kel választani!). A függvényekben nincs kiírás, azt a main végzi a függvények visszatérési értéke alapján.


2) a tételek elvégzik a kiírást. Ebben az esetben void-ként deklaráld őket, return nincs. A paraméterek megint csak a bemenő adatok. A main csak meghívja ezeket.


3) Ez a legbonyolultabb. A kiírást a main végzi, a tételek viszont void-ok. Return nincs. A paraméterek a bemenet, illetve egy kimenetnek megfelelő típusú *hivatkozás*. /ez az, amit te a talalt-tal akartál/ A main-ben változókat deklarálsz, amik majd az eredményeket tárolják. Ezeket a változókat adod meg majd a tételek hivatkozás paraméterének. A tételek nem írnak ki, azt majd a main fog, a saját változói alapján.

2012. aug. 2. 12:05
Hasznos számodra ez a válasz?
 9/12 zsomkovacs ***** válasza:

Ha ragaszkodsz a c++-hoz, akkor privátban írd meg az e-mail címed, szívesen segítek, megírom neked mindhárom változatot, hogy lásd, mi a különbség.


De pl. én is Pascallal emelt szintűztem (mondjuk nekem rengeteg évem volt előtte Pascalban), c++-t az egyetemen kezdtem. Most, egy év után a WinAPI-val meg hálózatkezeléssel szórakozok (magamtól, egyetemen nem tanultuk).

2012. aug. 2. 12:11
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:

"Most, egy év után a WinAPI-val meg hálózatkezeléssel szórakozok (magamtól, egyetemen nem tanultuk)."


Majd fogjátok a hálózatok előbb-utóbb elő kell kerüljenek.

Nálunk is utolsó előtti félévben volt számítógépes hálózatok, ahol alacsony sinztű C-s socketekkel kellett dolgozni, méghozzá elég összetett feladatokat.


A kérdésben adott kódok több sebből véreznek, erre már mások is rámutattak, valamint jó lenne eldönteni, hogy C++ vagy C kell neked, ugyanis sok C++-os dolog, például a cout nem használható a sima C-ben.

2012. aug. 2. 13:11
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!