C -ben, hogyan kell:addig olvasson be míg 0-t adok meg, prímszám ellenőrzés, egész szám kerekítés?
A feladat:
írjon programot ami beolvas pozitív egész számokat míg nem adunk meg 0-t. Majd kiírja az átlag értékuket felfele kerekítve egész számra majd kiírja az összes osztóját. Ha prímszám,akkor írja ki hogy ez prím szám
eddig jutottam:
#include<stdio.h>
int main(void){
int c,p,g,i;
p = 0;
i = 0;
while (1){ //itt nem tudom hogy addig folytassa mig 0 at nem adunk meg
printf ("zadaj kladne cislo\n");
scanf ("%d",&c);
p = p + c;
++i; // atlag szamitasnal lessz segitsegul
if (c<0){
printf("\nje to zaporne cislo!\n\n");
}
}
g = p/i;
printf("az atlag ertek: %8.0d",g); // itt nem tudom hogyan kerekitsen a program es folytatni hogy primszamokat es az oszthatosagot kiirja
printf();
}
megj: a beolvasas 0 ig már meg van oldva már csak:
A feladat ugy van megadva,hogy égészszámra kerekítve adja meg a az átlagot. igy rendben van?:
printf("\n\atlag:%8.0d\n",g);
a primszamot div vagy moddal kell megoldani?
printf("\n\atlag:%8.0d\n",g);
Én csak kezdő vagyok tehát lehet hogy ez nem egészen jó és "csúnya" is de:
2 átlag változót veszel pl átlag1. átlag2
az egyiket int a másikat float típusba írod!
Mind a kettővel kiszámolod.
És utánna egy if-vel megnézed hogy a float-os nagyobb-e mint a másik!!
Ha nagyobb akkor lépteted az int-eset és már is megvan a felfele kerekített átlag.
Átlagot float-ba kell tárolnod és számolnod menet közben. Legyen pl. fAtlag. Majd a 0 végjel után, erre a célra fenntartott int változóba kell berakni ezt az értéket ami legyen pl. iAtlag. az int csak egészet tud tárolni a törtrész elvész kvázi lefele kerekít, de nekünk felfele kell kerekíteni. Ezért korrigálni kell, ha fAtlag> iAtlag akkor iAtlag+=1.
"a primszamot div vagy moddal kell megoldani?"
Ez nem pascal. % operátorral lehet megoldani.
átlagot felesleges float-ban tárolni :)
atlag = osszeg / szam + 1, és ezzel már meg is oldottad, hogy felfelé legyen kerekítve. Azt, hogy prímszám-e úgy tudod megnézni n-re, hogy először megnézed osztható-e kettővel, ha nem akkor ciklus k=3..gyök(n) + 1, kettővel növelve, ciklusmag pedig, ha n % k == 0, akkor nem prím
és még egy megjegyzés:
if (c<0){
printf("\nje to zaporne cislo!\n\n");
}
ezt tedd közvetlenül a scanf után, és a printf(...) után rakj még egy continue; sort (nem tudom a C támogatja-e), ha nem akkor ennek a vizsgálatna az else ágába rakd azt, hohy hozzáadja az olvasott számot az összeghez, és a számláló növelését
leirom hova jutottam:
#include<stdio.h>
int main(void){
int c,p,g,i;
p = 0;
i = 0;
while (c != 0){
printf ("zadaj kladne cislo\n");
scanf ("%d",&c);
p = p + c;
++i;
if (c<0){
printf("\nje to zaporne cislo!\n\n");
}
}
i=i-1;
g = p/i;
printf("\n\npriemer:%8.0d\n",g);
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ezen a részen probaltam a primszam ellenorzest....mar csak a prim szam kiirasa hianyzik
#include<stdio.h>
int main(void){
int c,i,d;
scanf("%d",&c);
i=c;
while ( i != 0){
// printf("%d\n",i);
d=c%i;
// printf("dolog %d\n",d);
if (d == 0){
printf ("oszthato %d\n",i);
}
i--;
}
}
tárold el egy változóban, hogy volt-e osztója, és a while ciklus után ezt vizsgáld meg. Ha nem volt, akkor íratsd ki, hogy prím. A másik megjegyzés, hogy i-t inkább kettőtől indítsd felfelé, így gyorsabb lesz, mivel a számoknak a gyökük felett már nincs osztója, és a while feltételébe pedig az i < q kerüljön. A while elé pedig:
int q;
q = (int)sqrt(c) + 1;
Ezeket nem nagyon értem amiket utoljara irtal....meg csak most kostolgatom a C-t
De gonodltam egy ilyenre...
megszamoltatom,hogy hanyszor irta ki azt hogy oszthato egy szammal ha 2 vagy kisebb akkor az primszam ilyenkor torolje a konzol ablakot és irja ki h prim szam.
#include<stdio.h>
#include <conio.h>
int main(void){
int c,i,d,ks;
ks=0;
scanf("%d",&c);
i=c;
while ( i != 0){
// printf("%d\n",i);
d=c%i;
// printf("dolog %d\n",d);
if (d == 0){
printf ("oszthato %d\n",i,ks++);
}
i--;
}
if (ks<=2)
clrscr();
}
De valami baja van a CLRSCR vel (MS VB 6 ot hasznalok)
ez a hiba uzenet:
D:\VB6\proba\proba.cpp(29) : error C2065: 'clrscr' : undeclared identifier
D:\VB6\proba\proba.cpp(34) : warning C4508: 'main' : function should return a value; 'void' return type assumed
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!