Kezdő programozó vagyok, gyakorlásnál ennél a feladatnal megakadtam: Egy egész típusú 100 db elemet tartalmazó tömböt páratlan számokkal 100-tól növekvő értékekkel. Feladat: Összeadni a páros indexen lévő elemek értékét. Hogyan kell ezt megcsinálni?
eddig jutottam el: (feltölti a tömböt a 100-tól felfelé)
int main()
{
int t[100],i=0,szam=101,osszeg=0;
while(szam>100)
{
if((szam%2)==1)
{
t[i]=szam;
i++;
}
szam++;
}
return 0;
}
A fenti kód majdnem jó, én ezt gondolnám át: while(szam>100)
Mivel a szam-ot 101-el inicializálod és folyamatosan növeled, ez gyakorlatilag egy végtelen ciklus. A megállási feltételnek annak kéne lennie, hogy amíg az index (i) nem lépi túl a tömb (t) határait.
Az összegzést pedig csinálhatod új ciklusban is és ebben is. A lényeg, hogy ott az index paritását kell vizsgálnod. Ha páros, akkor hozzáadod a számot az összeghez. Ennyi. :)
Miért 101-től indítod a szam változót? Mi a logikád ezzel? Miért nem gondolod ezt tovább?
A konkrét hibák pedig: miből gondolod, hogy a szam változó valaha is kisebb lesz, mint 100, ha sehol nem vonsz ki belőle, és alapból nagyobb? A while angol szó annyit jelent, hogy ameddig. Ameddig szam nagyobb, mint 100, ez mindig igaz lesz, tehát. Mikor is akarsz megállni? Ha tele van a tömb. Hány elemű a tömb, és mivel jelölöd, hogy hol tartasz benne?
én így csinálnám
t: 100 elemű tömb
szam: amit beszúrok alapérték 101 (100 nál nagyobb legkisebb páratlan)
szum_paros: páratlan számok összege
for i=0 i<100 i++
{
t[i]=szam
if i mod 2 = 0
{
szum_paros=szum_paros+szam
}
szam=szam+2
}
Fentebb csupa jót írtak.
Egy lehetőség:
int main() {
int t[100],i,x;
for (i=0,x=101; i<100; i++,x+=2) t[i]=x;
x=0;
for (int i=0; i<100; i+=2) x+=t[i];
return x;
}
Én így oldottam meg végül: ( amit nem írtam le még volt annyi a feladat hogy ki kellett számolni a páratlan indexen lévő elemek átlagát)
int main()
{
int t[100],i=0,szam=101,szum_paros=0,szum_paratlan=0,atlag=0;
while(i<100)
{
t[i]=szam;
if((i%2)==0)
{
szum_paros=szum_paros+szam;
}
if((i%2)==1)
{
szum_paratlan=szum_paratlan+szam;
atlag=szum_paratlan/50;
}
i++;
szam=szam+2;
}
printf("%d\n%d\n%d",szum_paros,szum_paratlan,atlag);
return 0;
}
egy FATÁLIS hiba, ha jól látom: (while (szam>100))végtelen ciklus, mert a szam=101 és ehhez csak mindig adsz, így soha nem lesz vége a ciklusnak
itt gondolom while(i>100), de ekkor deklarálni kell előtte az i-t int i = 0;
2. hiba: csak páratlan számokat lehet beszúrni, tehát nem szám++, hanem szam=szam+2;
3. észrevétel: néhol lehet "optimalizálni"
pl:
if((i%2)==0)
{
szum_paros=szum_paros+szam;
}
if((i%2)==1) //ehelyett lehet else ág, hiszen egy szám ha nem páros, akkor csak páratlan lehet (1 feltétel vizsgálattal kevesebb)
{
szum_paratlan=szum_paratlan+szam;
atlag=szum_paratlan/50;
}
előző vagyok
Bocsi elnéztem! jó a megoldásod, így csak a 3. pontomat olvasd el :)
Az átlagot is elég a printf() előtt kiszámolni, felesleges minden egyes új elemnél.
A +=, -=, stb. operátorokat meg szokd meg, mert praktikusabb, mint duplán leíni a változó neveket. :)
[a = a + b] -> [a += b]
int main() {
int t[100], i=0, szam=101, szum_paros=0, szum_paratlan=0, atlag=0;
while(i<100) {
t[i]=szam;
if(i&1) szum_paratlan += szam;
else szum_paros += szam;
i++;
szam += 2;
}
atlag = szum_paratlan/50;
printf("%d\n%d\n%d",szum_paros,szum_paratlan,atlag);
return 0;
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!