» Poradna » Programy

C++ Aritmetický průměr, nefunkční program

 |   |  Microsoft Windows 7 Chrome 46.0.2490.71

Ahoj, napsal jsem program, který vypočíta aritmetický průměr do té doby, dokud nezadám číslo 5, která se do průměru započte. Můžete mi poradit ? #include<stdio.h>int main(){ int cislo,sum,pocet,ap; do{ cislo=0; printf("zadej cisla na vypocet aritmetickeho prumeru"); scanf("%d",&cislo); sum+=cislo; pocet++; }while(cislo!=5); ap=sum/pocet; printf("%d",ap); scanf("%d",&sum); }

Odpovědi na otázku

 |   |  Microsoft Windows 7 Opera 9.80

Možná bych pro jistotu udělal toto:int cislo,sum=0,pocet=0,ap;Aby jsi měl jistotu že na začátku tam bude opravdu nula. Jinak to vypadá v pořádku. Jen to teda počítá v celých číslech, tj průměr hodnot 4 a 5 je 4, protože ten zbytek se při výpočtu zahodí. Ale to může být něco co tam chceš, když jsi to tak napsal.Co ti tam nefunguje? a s čím potřebuješ poradit?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 46.0.2490.71

Tohle mi pomohlo :) A kdybych to chtěl vytisknout desetinné číslo na 2 místa, tak jak na to ?Děkuji moc !

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Firefox 41.0

Jo, největší problém byl s neinicializovanýma proměnnýma. Každý kompilátor se k nim chová jinak většinou je jejich obsah 0, nebo nějaký bordel co byl v paměti. Dále tvůj program nefunguje dle zadání, pokud zadáš jako číslo 5, cyklus se sice přeruší, ale číslo 5 se započte. Ideální je použít nekonečný cykluswhile( 1 ){}a místo podmínky na konci dát hned po zadání číslaif (cislo == 5) break;Pokud chceš výsledek s desetinnou čárkou, nemůžeš používat na všechno int - je to celočíselná proměnná. Jak výsledek ap, tak jeden z operandů v dělení musí být číslo s desetinnou čárkou - buď double, nebo float. (jeden z operandů v dělení proto, že double=int/int nejdřív vydělí dva integery a pak teprve výsledek celočíselného dělení uloží do float.)Takže: Buď nech ap, sum a cislo jako double (dáš tím možnost dělat průměr z desetinných čísel), nebo nech jako double jen ap a výsledek počítej ap=(double)sum/pocet (převede sum na double před dělením)K výstupu na dvě desetinná místa si nastuduj formátování printf.Jo a výpočet výsledku bych dal do podmínky zjišťující jestli náhodou není sum nula, nulou dělit opravdu nechceš. V případě že je, prostě ap=0.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Firefox 41.0

Sorry, že počet není nula, pochopitelně.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Firefox 41.0

Jo a ignoruj tu část s nekonečným cyklem, přehlédl jsem se a četl jsem „nezapočte“, sorry :D

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 46.0.2490.71

děkuju moc, jsem rád, že jste mi pomohl :)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 46.0.2490.71

Dopracoval jsem to sem, ale printf mi vyhodí hodnotu 0.00. Máte někdo nějaký nápad ? Děkuji předem#include<stdio.h>int main(){ int cislo,ap; float sum=0,pocet=0; do{ cislo=0; printf("zadej cisla na vypocet aritmetickeho prumeru"); scanf("%d",&cislo); sum+=cislo; pocet++; }while(cislo!=5); ap=(double)sum/pocet; printf("%.2f",ap); scanf("%d",&sum); }

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Firefox 41.0

Výsledek máš int, počet zcela nesmyslně float (počet čísel bude asi těžko desetinné číslo :)Ve chvíli kdy je sum float, měl by být float i vstup ze scanf. Pak samozřejmě nemusíš převádět sum na double v ap=(double)sum/pocet; (to byl jen příklad co dělat pokud bude desetinný jen výsledek a budeš ho mít v double)

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 46.0.2490.71

Děkuji moc, s vaší pomocí už mi to jde. Kdybyste někdo potřeboval, tady je finální kód programu :)#include<stdio.h>int main(){ int cislo,pocet=0; float sum=0,ap; do{ cislo=0; printf("zadej cisla na vypocet aritmetickeho prumeru"); scanf("%d",&cislo); sum+=cislo; pocet++; }while(cislo!=5); ap=sum/pocet; printf("%.2f",ap); scanf("%d",&sum); }

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Firefox 41.0

Jen jedna otázka, na začátku jsi zapoměl vynulovat proměnné které to potřebovaly (sum a pocet), ale paradoxně nezapomínáš nulovat cislo, které bude před použitím zadané vždycky. A ještě k tomu mu přiřazuješ nulu při každém průchodu cyklem, proč?

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Chrome 46.0.2490.71

No, myslel jsem, že to byl důvod chyby, a tak jsem tam dal vždy nulu. Neuvědomil jsem si to. Takže teď jsem změnil ...int cislo=0,pocet=0; float sum=0,ap; do{ printf("zadej cisla na vypocet aritmetickeho prumeru"); scanf("%d",&cislo)...Děkuji

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 7 Opera 9.80

printf("%.2f",ap);Kdyžtak se podívej například sem: http://en.cppreference.com/w/c/io/fprintf na konci máš i popis formátovacích řetězců.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Linux Firefox 41.0

díky, nechtělo se mi to hledat a na to co potřebuju používám iostream :)

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: C++, Průměr




Určitě si přečtěte

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

Osudová havárie Concordu: Před 18 lety přišel konec nadzvukových dopravních letadel

** Concorde byl nejrychlejším dopravním letadlem ** Atlantik dokázal přeletět za cca 3 až 3,5 hodiny ** Před osmnácti lety tragická havárie provoz těchto letadel prakticky ukončila

David Polesný, Jiří Černý | 38

Sonda Dawn prolétá jen 35 km od trpasličí planety Ceres a posílá úchvatné fotografie!

Sonda Dawn prolétá jen 35 km od trpasličí planety Ceres a posílá úchvatné fotografie!

** Sonda Dawn zkoumá trpasličí planetu Ceres od března 2015 ** Sonda nyní přešla na novou dráhu, nejblíže se dostává k povrchu na vzdálenost jen 35 km ** Ceres je největší planetkou hlavního pásu mezi Marsem a Jupiterem

Petr Kubala | 4

Tesla je stále ve ztrátě, ale elektromobily Model 3 se prodávají neuvěřitelně dobře

Tesla je stále ve ztrátě, ale elektromobily Model 3 se prodávají neuvěřitelně dobře

** Tesla má rekordní příjem, je ale ve ztrátě ** Objem výroby se zvyšuje, dochází ale baterie ** Pomoci mají nové továrny Gigafactory

Karel Javůrek | 91

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 39

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 58

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

** Apple aktualizoval notebooky MacBook Pro, dostaly nový hardware ** Těšit se můžete na nové procesory a větší paměť ** Cena nejvybavenějšího modelu překročí 200 tisíc korun

Martin Miksa | 99

Kde se bere elektřina v zásuvce? Poznejte 10 tajemství venkovních stožárů s dráty

Kde se bere elektřina v zásuvce? Poznejte 10 tajemství venkovních stožárů s dráty

Elektřina se vyrábí v elektrárnách, ale do zásuvek v našich domovech to pak má ještě hodně daleko. Dnes se na tuhle dlouhou cestu podíváme.

David Polesný | 83


Jízdní řády Bileto
Aktuální číslo časopisu Computer

Jak mobily určují svoji polohu?

Velký test notebooků pro studenty

Nejlepší reproduktory na párty

Služby a aplikace pro výuku angličtiny