Kezdőoldal » Számítástechnika » Programozás » C -ben, hogyan kell:addig...

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?

Figyelt kérdé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();



}


2011. nov. 1. 09:08
1 2
 1/13 A kérdező kommentje:

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);

2011. nov. 1. 09:51
 2/13 anonim ***** válasza:

É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.

2011. nov. 1. 10:11
Hasznos számodra ez a válasz?
 3/13 anonim ***** válasza:

Á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.

2011. nov. 1. 11:36
Hasznos számodra ez a válasz?
 4/13 _Jessy_ ***** válasza:

á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

2011. nov. 1. 11:54
Hasznos számodra ez a válasz?
 5/13 _Jessy_ ***** válasza:

é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

2011. nov. 1. 11:57
Hasznos számodra ez a válasz?
 6/13 _Jessy_ ***** válasza:
ja és még valami, ami a #4-ből lemaradt :) ha az osztásnál a vizsgált két szám osztható, akkor nem kell a +1
2011. nov. 1. 12:01
Hasznos számodra ez a válasz?
 7/13 A kérdező kommentje:

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--;


}



}

2011. nov. 1. 12:14
 8/13 _Jessy_ ***** válasza:

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;

2011. nov. 1. 12:22
Hasznos számodra ez a válasz?
 9/13 A kérdező kommentje:

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)

2011. nov. 1. 13:01
 10/13 A kérdező kommentje:

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

2011. nov. 1. 13:03
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!