C programozási feladat probléma!? A többit lent!
Írjon programot amely feltölt -20 és 20 közötti 40 elemű tömböt.Majd kiírja a képernyőre az átlagukat!
Írjon programot amely bekér a felhasználótól 20 darab valós számot,és minden negyediket bele ír a "szamok.txt" fájlba!
#include<stdio.h>
#include<stdlib.h>
int main(){
int tomb[5];
int i;
int meret=sizeof(tomb)/sizeof(int);
int atlag = 0;
int a=rand()%41+20;
srand(time(NULL));
for(i=0;i<meret;i++){
atlag+=tomb[i];
tomb[i]=rand()%41+20;
printf("%d\n",tomb[i]);
}
printf("%d\n",atlag);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int tomb[40];
int r = rand()%41-20;
int i;
int meret=sizeof(tomb)/sizeof(int);
int atlag = 0;
printf("A szamaink: \n");
for(i = 0; i < meret; i++)
{
tomb[i] = rand()%41-20;
atlag+=tomb[i];
printf("%d\t",tomb[i]);
}
printf("Atlag : %d\n",atlag/meret);
return 0;
}
Mi a kérdés? Mi a probléma?
Mi az hogy "Mm működik." ??????
sizeof(tomb)/sizeof(int);
Nem gondolod hogy itt szorozni kéne?
Minek számolni amikor a feladat 40 elemű tömbről beszél. Int, float, double... picit gondolkozz el rajta.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int meret = 40, tomb[meret], i;
double atlag = 0, ossz = 0;
srand(time(NULL));
printf("A szamaink: \n");
for(i = 0; i < meret; i++){
tomb[i] = rand()%41 - 20;
ossz += tomb[i];
printf("%4d",tomb[i]);
}
printf("Osszeg: %4.0f\n", ossz);
atlag = ossz / meret;
printf("Atlag : %4.2f\n", atlag);
system("PAUSE");
return 0;
}
> Nem gondolod hogy itt szorozni kéne?
Nem.
Jöttem kötekedni SimkoL.
C-ben még mindig nem használunk VLA-t, a tömbök méreteit csak konstans kifejezésekkel lehet megadni, pl. makróval. Így le se fordul a programod, persze ezt te is tudod mert sokszor le lett írva. Még sem értem miért ragaszkodsz makacsul a hülyeséghez és zavarod össze az ilyen dolgokkal a kezdőket? (A system("PAUSE");-t már meg sem említem..)
Compile Error
test.c: In function ‘main’:
test.c:8:1: error: ISO C90 forbids variable length array ‘tomb’ [-Wvla]
int tomb[meret], i;
^
test.c:21:1: warning: ignoring return value of ‘system’, declared with attribute warn_unused_result [-Wunused-result]
system("PAUSE");
^
sh: 1: PAUSE: not found
Helyesen úgy van ahogy a kérdező csinálta, vagy:
#define MERET 40
majd: int tomb[MERET];
Az átlag valóban double de az összeg nem. Miért is lenne egész számok összege lebegőpontos? Igen, majd kasztolni kell ott ahol arra szükség van.
Először is javasolnám az int helyett a char használatát, mivel ilyen kicsi számok esetén bőven elférnek annak a tartományában: [-128,127]. Persze egy ilyen feladatnál sok jelentősége nincsen, mert nem foglal sok memóriát 40 int típusú változó, de nagyobb projekteknél jól jönnek az ilyen megszokások, hogy takarékosan bánsz a memóriával.
No de nézzük a komoly problémákat...
Először is nem értem mi ez az elején: int r = rand()%41-20.
Sehol nem használod fel később az r változót, ráadásul a rand() függvénynek nem árt seed-et adni.
A meret változó értékadása is elég szakszerűtlen, mivel a tömböd konstans méretű, ezért javasolnám egy egyszerű #define direktíva használatát.
Az átlag változó neve nagyon megtévesztő, mert igazából az összeget tartalmazza.
Miután kiírod a tömb elemeid, nem zárod le a sort.
Az átlagszámításhoz nem árt, ha lebegőpontos számokat használsz.
Egy elegánsabb megoldása a feladatodnak:
#include <stdio.h>
#define SIZE 40
int main(void) {
char i, table[SIZE];
int sum = 0;
srand(time(NULL));
printf("A szamaink:\n");
for(i = 0;i < SIZE;i++) {
table[i] = rand()%41-20;
sum += table[i];
printf("%4d",table[i]);
}
printf("\n");
printf("Atlag: %f\n",(float)sum/40);
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!