Kezdőoldal » Számítástechnika » Programozás » Valami miatt nem jó a programom?

Valami miatt nem jó a programom?

Figyelt kérdés

Csináltam egy programot, ami bekéri a tömb elemeit majd egy bekért számról eldönti, hogy van-e benne ilyen.


De valami nem jó.


#include<stdio.h>


#define N 10


int main()

{

int tomb[N];

int i;


for(i = 0; i < N; i++)

{

printf("%d. elem:\n", i);

scanf("%d", &tomb[i]);

}


int szam, idx;

printf("Kerek egy szamot:\n");

scanf("%d", &szam);


i = 0;

do

{

if(szam == tomb[i])

{

idx = i;

printf("Van ilyen szam! Helye: %d\n", i);

}

else

{

printf("Nincs ilyen elem!\n");

}


i++;

}while(szam != tomb[i]);


return 0;

}



2014. dec. 7. 16:42
1 2
 1/18 anonim ***** válasza:
100%

Elég sok hiba van benne.

Először is, ha a szám nincs benne a tömbben kapásból csináltál egy végtelen ciklust.

Másrészt logikailag is hibás, hogy minden egyes lépés után kiírod, hogy nincs ilyen elem, mikor lehet, hogy van, csak a végén.

Harmadrészt a hátultesztelő ciklus is teljesen rossz elgondolás, ugyanis az első elem kivételével mindig kilépsz a ciklusból, mielőtt megtalálnád az elemet.

2014. dec. 7. 17:01
Hasznos számodra ez a válasz?
 2/18 anonim ***** válasza:

Pontosan mi a hiba?


Így látatlanban annyit, hogy a do...While ciklus nem ér sose véget, ha a bekért szám nem szerepel a tömbelemek között, és túlindexelés lesz, ezt asszem Stack Overflow címen adja vissza a legtöbb fordító. Ezt ezért mindenképp több értelme lenne for ciklussal csinálni.

2014. dec. 7. 17:03
Hasznos számodra ez a válasz?
 3/18 A kérdező kommentje:

Értem. És meddig menne a ciklusom így?


Mert ha van iy benne ilyen elem akkor sem csinál semmit.

2014. dec. 7. 17:11
 4/18 A kérdező kommentje:

i = 0;

while(i < N)

{

if(szam == tomb[i])

{

idx = i;

printf("Van ilyen elem! Helye: %d\n", idx);

}

i++;

}


No így kiírja, de csak az első előfordulást kéne kiírnia, így meg mindegyiket kiírja.

2014. dec. 7. 17:15
 5/18 A kérdező kommentje:

Megcsináltam. Ez már jó.


i = 0;

while(i < N && szam != tomb[idx])

{

if(szam == tomb[i])

{

idx = i;

printf("Van ilyen elem! Helye: %d\n", idx);

}

i++;

}


Bocs hogy nincs tabulálva.

2014. dec. 7. 17:18
 6/18 anonim ***** válasza:

Nem vagyok nagy C-s, de a


#define N 10


soron miért nincs fennakadva senki?

2014. dec. 7. 19:44
Hasznos számodra ez a válasz?
 7/18 anonim ***** válasza:

A megoldásod már majdnem jó, csak az a probléma, hogy ha többször is szerepel a szám, akkor többször írja ki.

Ezt szépen egy külön metódussal lehet megoldani, amiben benne van a while ciklusod (bár én inkább for-t használnék), és ha megtalálta az elemet akkor true-val tér vissza, egyébkén false-al.

2014. dec. 7. 20:00
Hasznos számodra ez a válasz?
 8/18 anonim ***** válasza:

"Nem vagyok nagy C-s, de a

#define N 10

soron miért nincs fennakadva senki?"


Miért kéne rajta fennakadni?


"A megoldásod már majdnem jó, csak az a probléma, hogy ha többször is szerepel a szám, akkor többször írja ki."

Nem írja ki többször, az első találatnál kilép a ciklusból.


"Ezt szépen egy külön metódussal lehet megoldani, amiben benne van a while ciklusod (bár én inkább for-t használnék), és ha megtalálta az elemet akkor true-val tér vissza, egyébkén false-al."

C-ben nincs logikai változó.

Ettől függetlenül a részek függvénybe/eljárásba rendezése mindig jó ötlet.

2014. dec. 7. 20:05
Hasznos számodra ez a válasz?
 9/18 anonim ***** válasza:

# 8/8 Időpont ma 20:05


Például mert most gyakorlatilag értéket adna egy N változónak, de a #define-t erre használni... csúnya.

2014. dec. 7. 20:20
Hasznos számodra ez a válasz?
 10/18 anonim ***** válasza:

"Például mert most gyakorlatilag értéket adna egy N változónak, de a #define-t erre használni... csúnya."

Mi van?

C-ben nincs konstans, ezért szokás makrókkal definiálni őket.

Szar megoldás, de C-ben nincs ennél jobb.


De vergődik ugye mindig mindenki, hogy C-vel kell kezdeni a programozást, mert az olyan jó tanulónyelv, meg olyan könnyű...

2014. dec. 7. 20:30
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!