Soucet a prumer cisel (while) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Soucet a prumer cisel (while) – C / C++ – Fórum – Programujte.comSoucet a prumer cisel (while) – C / C++ – Fórum – Programujte.com

 

h2so40
Newbie
10. 11. 2007   #1
-
0
-

zdravím dostali jsme ukol se zněním :
z klavesnice zadejte cela cisla kladna,zaporna a nulu (cisla mensi nez 100) a vypocitejte prumer a soucet cisel co ste vlozili
a to tak že program zvlášť sečte kladné čísla (a udělá prumer ), zaporné čísla(a udela prumer) , a počet nul
zadavání čísel se ukončí když vložíte číslo 1e3.
má to být pomocí while

je tu nekdo kdo by mi prosim pomohl ? sem totalne tupy (aspon cast jak tam vložit na zacatek podminky a hlavne jak tam dat podminku aby se to ukončilo když vložím to 1e3 zbytek zvládnu díky).

Nahlásit jako SPAM
IP: 85.71.13.–
tmi0
Věrný člen
10. 11. 2007   #2
-
0
-

nerozumim te ukoncovaci podmince: program se ukonci kdyz zadate cislo 1e3. to ma byt hexadecimalne? nejak takhle:

int in, klad_poc=0, zap_poc=0, klad_souc=0, zap_souc=0, poc_nul=0;
do{
scanf("%d",&in);
if(in>0) klad_souc+=in,klad_poc++;
else if(in<0) zap_souc+=in,zap_poc++;
else if(in == 0x1e3) break; //!!!
else poc_nul++;
}
printf("Prumer kladnych=%f, prumer zapornych=%f, pocet nul=%d\n",(float)klad_souc/klad_poc, (float)zap_souc/zap_poc, poc_nul);

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zelenáč0
Posthunter
10. 11. 2007   #3
-
0
-

Rekl bych, ze 1e3 je 1000 (1*10^3)?!

Nahlásit jako SPAM
IP: 89.176.254.–
Zelenáč0
Posthunter
10. 11. 2007   #4
-
0
-

Jinak (tedy predpokladam, ze se budou zadavat cisla mensi nez 100 A VETSI NEZ -100) by stacil datovy typ char (i kdyz to by zase neodpovidalo ani me teorii ze 1e3 je 1000 a ani te, ze 1e3 je 483, jelikoz signed char je tusim od -128 do 128..)

To tmi: nemelo byt tam byt misto "do" "while"?

Nahlásit jako SPAM
IP: 89.176.254.–
tmi0
Věrný člen
10. 11. 2007   #5
-
0
-

To Zelenáč : jo nakonci melo bejt while(1);, nejak mi to vypadlo... 1e3==1000 me taky nedoslo... ale stejne mi to logicky nesedi, jak by potom program reagoval na cisla 101 atd... napada me ze se ma ukoncit spis pri vsutpu>=1e2 || <=-1e2... a pak by skutecne stacil signed char. ale ta pametova uspora je nepatrna, navic se pri aritmetickych vyrazech celociselne typy stejne konvertujou na int

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zelenáč0
Posthunter
10. 11. 2007   #6
-
0
-

To tmi : Jednou to staci :-D Jasne, ja bych taky pouzil int.. Jen me tak napadlo, ze ucitel by na to mohl mit jiny nazor, kdyz urcil tak maly rozsah zadavanych cisel ;-)

Nahlásit jako SPAM
IP: 89.176.254.–
Zelenáč0
Posthunter
10. 11. 2007   #7
-
0
-

Takhle si nahanis prispevky? Aby te CuroBOT nevymaz jako spammera :smile20:

Nahlásit jako SPAM
IP: 89.176.254.–
tmi0
Věrný člen
10. 11. 2007   #8
-
0
-

sry) to byl bug meho internetoveho pripojeni...

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zelenáč0
Posthunter
10. 11. 2007   #9
-
0
-

V pohode ;-)

Nahlásit jako SPAM
IP: 89.176.254.–
Jeyekomon0
Stálý člen
10. 11. 2007   #10
-
0
-

Hmm, je tu uz kod v C, uvedu jeste v C++.
Pokud bys to chtel umlatit jen pomoci while, pak:



#include <iostream>
using namespace std;
int main()
{
int pocet = 0, cislo = 0;
int kladny_soucet = 0, kladny_pocet = 0;
int pocet_nul = 0;
int zaporny_soucet = 0, zaporny_pocet = 0;


while((cislo < 100)&&(cislo > -100))
{
pocet = pocet + 1;
cout <<" " <<pocet <<". cislo: ";
cin >> cislo;

while((cislo > 0)&&(cislo < 100))
{
kladny_soucet = kladny_soucet + cislo;
kladny_pocet = kladny_pocet + 1;
break;
}

while(cislo == 0)
{
pocet_nul = pocet_nul + 1;
break;
}

while((cislo < 0)&&(cislo > -100))
{
zaporny_soucet = zaporny_soucet + cislo;
zaporny_pocet = zaporny_pocet + 1;
break;
}
}

cout <<endl <<" Soucet kladnych cisel: " <<kladny_soucet <<endl;

while(kladny_pocet > 0)
{
cout <<" Prumer: " <<kladny_soucet / kladny_pocet <<endl <<endl;
break;
}

cout <<" Pocet nul: " <<pocet_nul <<endl <<endl
<<" Soucet zapornych cisel: " <<zaporny_soucet <<endl;

while(zaporny_pocet > 0)
{
cout <<" Prumer: " <<zaporny_soucet / zaporny_pocet;
break;
}

//Muze byt prumer zaporny ??

cin.get();
cin.get();
return 0;
}


Jsem na nej pysny, je to jeden z mych prvnich fungujicich programu.. :smile2:

Nahlásit jako SPAM
IP: 195.113.65.–
jjk
Zelenáč0
Posthunter
10. 11. 2007   #11
-
0
-

To Jeyekomon : :smile5:

Nahlásit jako SPAM
IP: 89.176.254.–
tmi0
Věrný člen
10. 11. 2007   #12
-
0
-

...
tak nejak nechapu logiku toho programu. proc tam pouzivas jen while? je jasne ze se telo provede pouze jedenkrat, tak tim ctenare akorat mates... a proc tam mas promennou pocet? neni pozadovana a navic jeji hodnota je v kazdem kroku programu soucet pocet_kladnych+pocet_zapornych + pocet_nul. a u meho kodu neni specifikovano jestli je v C nebo v C++, zkompilovat by se dal v obojim... navic jediny rozdil je v tom jaky input/output se pouzije... a myslim ze je lepsi psat programy na 9 radku nez programy na 55 radku)

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Jeyekomon0
Stálý člen
10. 11. 2007   #13
-
0
-

To tmi :
h2so4 psal, ze to ma byt pomoci while, tak me zajimalo, jestli to jde "jen" pomoci while..
Cekal jsem, ze na ten program budou reakce.. Urcite neni dokonaly, ja jsem rad, ze funguje.
Jakmile nekde vidim "printf", tak to povazuju za C ..
Z toho vseho vyplyva, ze by to mozna chtelo forum pro zacatecniky, kde by se mohlo diskutovat o jednoduchych vecech a kde by se mysky a novacci nestydeli za to pridat tam svuj prispevek..

Nahlásit jako SPAM
IP: 195.113.65.–
jjk
Zelenáč0
Posthunter
10. 11. 2007   #14
-
0
-

To Jeyekomon : Ale mne se to reseni pomoci "while" moc libi :smile2: Me samotneho by to nenapadlo, je to takove... originalni ;-) Na muj kod se take vzdy okamzite sesypou stiznosti od Jury, sn3d apod. na "priserny navrh".. Zastavam nazor, ze zivot je moc kratky na to, aby clovek programoval a jeste se zabyval navrhem sveho kodu. Zkratka neco dotahnu do podoby, kdy to funguje, a pokud to za to stoji, pak se teprve snazim kod zkratit, zprehlednit, pridelat nejake komentare...

Nahlásit jako SPAM
IP: 89.176.254.–
tmi0
Věrný člen
10. 11. 2007   #15
-
0
-

To Jeyekomon : ale tak se nestyd, ja sem to nemyslel jako nejaky vysmech, spis jako objektivni kritiku... kdyz sem byl malej tak sem psaval strasny prasarny (a myslim ze sem nebyl sam...). klidne sem pis vsechno co te napadne (aspon se tu bude neco dit), a my ti rekneme jak to napsat efektivneji (nebo spis jak si myslime ze to je efketivnejsi, a ne vzdy mame pravdu)).
To Zelenáč : na zprehlednovani kodu jsem nikdy nemel zaludek... vzhledem k tomu ze mam tendenci psat na co nejmin radku to bejva dost nechutne nahusteny (operator ',' rulez))

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zelenáč0
Posthunter
10. 11. 2007   #16
-
0
-

Tak to ja, at napisu sebevetsi prasarnu, musi to byt dokonale "typograficky spravne". Vsechno odsazuji minimalne po dvou mezerach, lepe vsak po ctyrech ci pomoci tabulatoru, za kazdym parametrem musi byt mezera, mezi operatory pisu zasadne mezeru.. Absolutne nesnasim "jednoradkove" if bez slozenych zavorek nebo dokonce na jednom radku.. Ackoli jsem "normalne" desnej bordelar, na "strukture" kodu si doopravdy zakladam. Naopak s navrhem se opravdu nikdy nezabyvam. Zkratka pisu to, co mi zrovna vytane na mysli, nijak nad tim nepremyslim - jestli bych tenhle objekt nemel rozdelit, jestli by tahle metoda nemela byt soukroma nebo proc ta funkce kolize, od ktere ocekavam logickou hodnotu, vraci long int...

Nahlásit jako SPAM
IP: 89.176.254.–
tmi0
Věrný člen
10. 11. 2007   #17
-
0
-

tak to to si taky rikam, ale kdyz se ti potom kod roztece pres sto radku a porad nema smysl delit ho do vic souboru tak si rikam ze to uz prestava bejt prehledny...
jednoradkovy if & while & for pouzivam pokud jejich telo obsahuje jeden prikaz, to mi pride rozhodne lepsi.
a slozeny zavorky tam tez pisu, ale vetsinou jim nevyhrazuju volnej radek, clovek to odlisi pomoci odsazeni (to se snazim mit taky striktne)
nejlepsi je podle me psat husty bloky navzajem souvisejiciho kodu, ktery pak oddelis jednim-dvema prazdnejma radkama, v tom se pak celkove snaz orientuje... nesnasim lidi ktery delaj prazdnej radek snad po kadzdym prikazu...

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
h2so40
Newbie
10. 11. 2007   #18
-
0
-

ano to cislo ma byt ukoncene cislem 1e3 jako neco přes 1000 ...

Nahlásit jako SPAM
IP: 85.71.13.–
tmi0
Věrný člen
10. 11. 2007   #19
-
0
-

tak v tom pripade by to muj program zezral, jen by bylo treba nahradit
else poc_nul++;
radky
else if(in==0)poc_null++;
else printf("Cislo mimo rozsah\n");
a odstranit to 0x ze zapisu cisla 1e3

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Jeyekomon0
Stálý člen
10. 11. 2007   #20
-
0
-

To h2so4 :
jej, a ja myslel, ze 1e3 je 100, heh..

Nahlásit jako SPAM
IP: 195.113.65.–
jjk
h2so40
Newbie
13. 11. 2007   #21
-
0
-

#include<stdio.h>

#include<stdlib.h>
int main ()
{
int in, klad_poc=0, zap_poc=0, klad_souc=0, zap_souc=0, poc_nul=0;
do{
scanf("%d",&in);
if(in>0) klad_souc+=in,klad_poc++;
else if(in<0) zap_souc+=in,zap_poc++;
else if(in == 1e3)
break; //!!!
else if(in==0)poc_nul++;
else printf("Cislo mimo rozsah\n");
}
while (1);

printf("Prumer kladnych=%f, prumer zapornych=%f, pocet nul=%d\n",(float)klad_souc/klad_poc, (float)zap_souc/zap_poc, poc_nul);
system("pause");
return 0;
}

když toto vložim tak se to ukoončí ale už se nic nevypíše vlastne se to jakoby sekne

Nahlásit jako SPAM
IP: 85.71.13.–
Zelenáč0
Posthunter
13. 11. 2007   #22
-
0
-

Jednak ta podminka nemuze nikdy nastat a jednak, co to je za cislo "1e3" - nema to byt "0x1e3" (divim se, ze se to vubec prelozi)???

Nahlásit jako SPAM
IP: 89.176.254.–
tmi0
Věrný člen
13. 11. 2007   #23
-
0
-

To Zelenáč : ??? proc by tam 1e3 byt nemohlo? to se prelozi naprosto ok. je to sice realne cislo, ale porovnavat realna a desetina lze ... rovnost u realnych byva osemetna, ale vzhledem k tomu ze to realne je konstanta ktera se porovnava s celym cislem to nemuze bejt problem, normalne se to pri zadani 1000 ukonci
To h2so4 : no ono by to ani nic vypsat zprvu nemelo, protoze prvni instrukce ke ktere se po inicializaci dostane je funkce scanf, ktera ceka na uzivatelsky vstup. nebo jak presne se to chovalo? zkousel si tam zadat cisla...?

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
h2so40
Newbie
13. 11. 2007   #24
-
0
-

To h2so4 [#54604]: no ono by to ani nic vypsat zprvu nemelo, protoze prvni instrukce ke ktere se po inicializaci dostane je funkce scanf, ktera ceka na uzivatelsky vstup. nebo jak presne se to chovalo? zkousel si tam zadat cisla...?


no když zadam ty cisla pak stisknu 1e3 a už se nedá zadat ani jine cislo ani to nic nevypíše jedine co se da udelat je že to zavřu.

Nahlásit jako SPAM
IP: 85.71.13.–
h2so40
Newbie
13. 11. 2007   #25
-
0
-

To h2so4 [#54604]: no ono by to ani nic vypsat zprvu nemelo, protoze prvni instrukce ke ktere se po inicializaci dostane je funkce scanf, ktera ceka na uzivatelsky vstup. nebo jak presne se to chovalo? zkousel si tam zadat cisla...?


no když zadam ty cisla pak stisknu 1e3 a už se nedá zadat ani jine cislo ani to nic nevypíše jedine co se da udelat je že to zavřu.

Nahlásit jako SPAM
IP: 85.71.13.–
tmi0
Věrný člen
13. 11. 2007   #26
-
0
-

tak problem je v tom ze kdyz zadas 1e3 tak on to nepochopi jako cele cislo, ale jako desetine, coz je v rozporu s implementaci. toto by se dalo zaridit tak ze bys misto do promenne typu int nacital do promenne typu float(double..), tedy fuknce scanf by vypadala takto: scanf("%f",&in), a podminka testovani rovnosti s nulou by vypadala takto: if(int(in) == 0)... protoze realne cislo 0 neni vzdy nula). jinak by to melo byt v poradku.
ovsem to je castecne v rozporu se zadanim, kde se mluvi o cislech celych. to by se dalo vyresit takto:
float temp;
int in.
do{
scanf("%f",&temp);
in = int(temp);
... a dal uz normalne

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
h2so40
Newbie
17. 11. 2007   #27
-
0
-

//zadavejte z klavesnice cela cisla - kladna, zaporna, 0 mensi nez 100.

//vkladani ukoncite cislem 1e3
//vypoctete pocet a prumer kladnych cisel
//pocet a prumer zapornych cisel a pocet nul
//cislo 1e3 nesmim ani spracovavat
#include <stdio.h>
#include<stdlib.h>
main ()
{
float prumer_klad,prumer_zap;
int pocet_kl,poc_nul,poc_zap,soucet_klad,soucet_zap,cislo,;
prumer_klad =0;
prumer_zap=0;
pocet_kl=0;
poc_nul=0;
poc_zap=0;
soucet_klad=0;
soucet_zap=0;
cislo = 0;
printf ("zadavejte cisla,zadavani ukoncete cislem 1e3");
while ((cislo !=1e3) && (cislo > -100) && (cislo < 100))
scanf ("%d",&cislo);

if (cislo !=0)
{
if (cislo<0)
{

poc_zap=poc_zap+1;
soucet_zap=soucet_zap+cislo;
prumer_zap=soucet_zap/poc_zap;

}
if (cislo == 0)
{
poc_nul=cislo+1;
}
if (cislo >0)
{
pocet_kl=pocet_kl+1;
soucet_klad=soucet_klad+cislo;
prumer_klad=soucet_klad/pocet_kl;
}
}
printf ("pocet kladnych cisel %d\n",pocet_kl);
printf ("soucet kladnych cisel je %d\n",soucet_klad);
printf ("prumer kladnych cisel je %d\n",prumer_klad);
printf ("pocet zapornych cisel %d\n",poc_zap);
printf ("soucet zapornych cisel je %d\n",soucet_zap);
printf ("prumer zapornych cisel je %d\n",prumer_zap);
printf ("pocet nul je %d\n",poc_nul);
system("pause");
return 0;
}

prosim hodte radu proč to nejede diky

Nahlásit jako SPAM
IP: 85.71.13.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 48 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý