» Poradna » Programy

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

Odpovědět  |  Zobrazit bez stromu  |  Upozornit redakci  |  nových odpovědí: 13/13
 |   |  Microsoft Windows 7 Chrome 46.0.2490.71  |  [213.226.252.---]

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  |  [213.226.252.---]

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  |  [213.226.252.---]

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  |  [213.226.252.---]

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  |  [213.226.252.---]

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  |  [213.226.252.---]

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