[C++] Średnia z liczb nieparzystych z przedziału 0-20

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
sQrtek
Sędziwy Jeż
Sędziwy Jeż
Posty: 99
Rejestracja: 13 lut 2010, 11:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

[C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: sQrtek »

WItam

Mam do napisania program który liczy średnią z liczb nieparzystych, z przedziału 0-20. Napisałem program, lecz coś w nim musi być nie tak, bo.. licząc samemu średnią z tych liczb, zupełnie co innego wychodzi, dlatego Proszę o pomoc w poprawie programu.
Z góry dzięki.

Kod: Zaznacz cały

#include <iostream>

/*program pobierający liczby z klawiatury (zero kończy wpis) i obliczający 
średnią liczb dodatnich nieparzystych z przedziału od 0 do 20 */

using namespace std;

int main()
{
int liczba;
float suma=0;
int ilosc=0;
float srednia;
int parzysta=((liczba%2)==0);

cout << "Liczba musi byc: Nieparzysta, Dodatnia, i z przedzialu 0-20.." << endl;
cout << "Liczba( 0 - konczy wpis )" << endl;

while(liczba!=0)
{
    cout << "Podaj liczbe: ";
    cin >> liczba;

        if(liczba<0 || liczba>20 || (liczba%2)==0)
         {
        cout <<"Podano nieprawidlowa liczbe !" << endl;
        cout <<"Podaj liczbe: ";
        cin >> liczba;
        suma=suma+liczba;
        ilosc=ilosc+1;
        }
        else
        {
        while(liczba>0 && liczba<20 && liczba!=parzysta)
         {
        cout <<"Warunek został spełniony. !" << endl;
        cout << "Podaj kolejną liczbe: ";
        cin >> liczba;
        }
   }
}
suma=suma+liczba;
ilosc=ilosc+1;
srednia=suma/ilosc;

cout << endl;
cout << "Srednia tych liczb wynosi: " << srednia << endl;
return 0;
}
Awatar użytkownika
soulreaver1
Wytworny Kaczor
Wytworny Kaczor
Posty: 409
Rejestracja: 13 mar 2009, 10:03
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64
Lokalizacja: 127.0.0.1

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: soulreaver1 »

Spróbuj tak:

Kod: Zaznacz cały

suma=(suma+liczba);
ilosc=(ilosc+1);
srednia=(suma/ilosc);
Awatar użytkownika
sQrtek
Sędziwy Jeż
Sędziwy Jeż
Posty: 99
Rejestracja: 13 lut 2010, 11:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: sQrtek »

soulreaver1 pisze:Spróbuj tak:

Kod: Zaznacz cały

suma=(suma+liczba);
ilosc=(ilosc+1);
srednia=(suma/ilosc);
Nie to raczej nic nie pomoże pomimo dania tego w nawiasy..

Nie wiem już zupełnie jak ten program zrobić, próbowałem przerobić ten program do pętli 'do-while'..
skapłem się że zupełnie nie chodzi mi warunek z liczbami nieparzystymi.. wiecie może jak ten warunek zmienić by odróżniał liczby nieparzyste od parzystych? Próbowałem już zadeklarowania w zmiennej, później bez zmiennej i nic.. może źle zadeklarowałem to w warunku? Sprawdźcie sami poniżej kod.

Kod: Zaznacz cały


#include <iostream>

using namespace std;

int main()
{

int suma;
int liczba;
int ilosc;
int wynik;
int parzysta;
parzysta=((liczba%2)==0);

cout <<"Liczba 0 - Konczy podawanie ocen. " << endl;

do
{

cout << "Podaj liczbe: ";
cin >> liczba;

suma=suma+liczba;
ilosc++;

if(liczba<0 || liczba>20 || liczba==parzysta)
{
cout << "Podales bledna wartosc liczby !" << endl;
}

} 
while(liczba!=0);

wynik=suma/ilosc;

cout << "Srednia wynosi: " << wynik << endl;

return 0;

}


Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: ethanak »

No to pomyśl sobie wreszcie zamiast na pałę próbować losowo rozmiwszczać instrukcje (tak, za którym razem by Ci pewnie wyszło, tak samo jak tej małpie co pisała Hamleta)...

Masz coś takiego:

Kod: Zaznacz cały

int liczba;
int ilosc;
int wynik;
int parzysta;
parzysta=((liczba%2)==0);
a potem sprawdzasz czy wprowadzona liczba jest równa wartości "parzysta" obliczonej przed wprowadzeniem liczby. Jaka Twoim zdaniem magia tu działa aby takie coś miało szansę funkcjonowania?

Teraz popatrz na swój kod i odpowiedz jaką wartość ma "parzysta" w momencie porównania.

A test "liczba jest nieparzysta" to w najprostszym przypadku (liczba % 2).
bierek
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 11 lip 2011, 10:08
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: bierek »

Sorry, ale dawno się tak nie uśmiałem...
Piwo dla ethanaka oczywiście za wyjaśnienie.
sQrtek, weź najpierw napisz sobie algorytm (nie w c++, ale choćby w języku polskim), a potem zabierz się za pisanie kodu realizującego algorytm.
Jaki sens ma dodanie wprowadzonej liczby do sumy, inkrementacja ilości, a potem zbluzganie użytkownika, że złą liczbę podał?
Awatar użytkownika
sQrtek
Sędziwy Jeż
Sędziwy Jeż
Posty: 99
Rejestracja: 13 lut 2010, 11:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: sQrtek »

@ethanak

Dzięki, ale doszedłem do tego w inny sposób, najpierw tworząc program który sprawdza czy liczba jest parzysta i nieparzysta, tak to jest jak się zabiera za programy skomplikowane nie mając pojęcia o podstawach. Ciężkie są początki niestety :D

@bierak
Dzięki za napisanie posta naprawdę wnoszącego wiele sensu do tego topicu. Piwo dla Ciebie ;)
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: ethanak »

Ale bierek akurat dał Ci bardzo ważną radę - rozpisanie sobie algorytmu w jakimś języku naturalnym, a dopiero potem implementowanie tego w konkkretnym języku programowania. Jest to normalna praktyka i jeśli uznałeś że jego post nic nie wnosi - po prostu go nie zrozumiałeś. I nie masz się obrażać i tupać nóżką jak trzynastoletnia panienka, a posłuchać rady gościa, który jest zawodowym programistą C++.
Nie pasuje? No to pietruszkę możesz sprzedawać a nie programować.
bierek
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 11 lip 2011, 10:08
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: bierek »

@sQrtek, tak jak pisze ethanak - ja mówiłem poważnie.
Nie sztuką jest napisać program, który się kompiluje i uruchamia.
Ważne, żeby realizowany algorytm miał sens.
Ja to wszystko rozumiem - też wolę pisać niż projektować, ale naprawdę zastanów się, czy kolejność operacji w Twoim programie jest właściwa.
Więc czekam na to piwo :)
Awatar użytkownika
sQrtek
Sędziwy Jeż
Sędziwy Jeż
Posty: 99
Rejestracja: 13 lut 2010, 11:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: sQrtek »

Ja dopiero zaczynam pisać programy w C++, i ogólnie zaczynam z programowaniem, więc nie od razu Rzym zbudowano. Każdy jakoś zaczynał. Nie od razu przecież ten program musi spełniać wszystkie standardy, być w 100% zgodny , dlatego jako początkujący Proszę o jakieś rady ;).
Rozumiem Ciebie bierek to może śmieszy, i że dla kogoś ten program może być trudny do wykonania, skoro z C++ ma doczynienia od kilku dni, a dla kogoś kto się tym zajmuje od kilku lat, jest zawodowym programistą, pisze programy na kilkaset linii kodu, to taki program to bułka z masłem, ale dla mnie to dopiero początki są z Pętlami, bo dopiero wczoraj z nimi zacząłem pisać jakiś program. I narazie zapoznaję się ze strukturą sposobu pisania programów C++, które jak widać czasami nie mają sensu, jak ten powyżej.

Czyli powiadacie że zamiast zacząć pisać programy powinienem zająć się algorytmiką i najpierw pouczyć się algorytmów?, z którymi do tej pory niestety nie miałem wiele wspólnego, bo programy które pisałem starałem się pisać "z głowy".
infort
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 204
Rejestracja: 19 paź 2010, 02:13
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: Unity
Architektura: x86_64
Kontakt:

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: infort »

sQrtek pisze:Czyli powiadacie że zamiast zacząć pisać programy powinienem zająć się algorytmiką i najpierw pouczyć się algorytmów?, z którymi do tej pory niestety nie miałem wiele wspólnego, bo programy które pisałem starałem się pisać "z głowy".
Nikt nie twierdzi, że "algorytmika" formalnie jest niezbędna do pisania programów. Ale myślenie jest.

Dobra rada jest taka, że zanim coś napiszesz, zastanów się nad sposobem osiągnięcia tego co chcesz zrobić. Nie ma znaczenia język, w którym piszesz (pułapki konkretnej składni wyjdą dopiero na dalszym etapie). Niczego nie napiszesz, jesli przynajmniej w głowie nie ułożysz sobie krok po kroku w jaki sposób program ma działać. Połowa błędów początkujących programistów to powielanie bez zastanowienia gotowych recept. A druga to próby pójścia na skróty. Programowanie jest w pewnym sensie sztuką, ale opartą na logice, wiedzy i doświadczeniu. Dokładnie w takiej kolejności.
Toshiba C850 i3-3210M 4GB RAM, Intel HD4000, Ubuntu 14.04
Samsung N145 Lubuntu 14.04

www.bezpieczneubuntu.pl
bierek
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 11 lip 2011, 10:08
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: bierek »

Rozumiem Ciebie bierek to może śmieszy, i że dla kogoś ten program może być trudny do wykonania, skoro z C++ ma doczynienia od kilku dni, a dla kogoś kto się tym zajmuje od kilku lat, jest zawodowym programistą, pisze programy na kilkaset linii kodu, to taki program to bułka z masłem, ale dla mnie to dopiero początki są z Pętlami, bo dopiero wczoraj z nimi zacząłem pisać jakiś program. I narazie zapoznaję się ze strukturą sposobu pisania programów C++, które jak widać czasami nie mają sensu, jak ten powyżej.
Rozbawiło mnie tak naprawdę to:

Kod: Zaznacz cały

int liczba;
float suma=0;
int ilosc=0;
float srednia;
int parzysta=((liczba%2)==0);
Czyli obliczanie wartości wyrażenia z użyciem niezainicjalizowanej zmiennej 'liczba' i przypisywanie jej do zmiennej 'parzysta', a potem dla każdej liczby wprowadzonej przez użytkownika program sprawdzał, czy wartość liczby jest równa wartości zmiennej 'parzysta'.
Ale powiem Ci, że w niektórych językach da się użyć podobnych konstrukcji, np. javascript:

Kod: Zaznacz cały

parzysta=function(liczba){
  return liczba%2==0;
}
Oczywiście zasadniczą różnicą jest słowo 'function', które chyba wyjaśnia, na czym polega różnica :)
Nie ma znaczenia język, w którym piszesz (pułapki konkretnej składni wyjdą dopiero na dalszym etapie). Niczego nie napiszesz, jesli przynajmniej w głowie nie ułożysz sobie krok po kroku w jaki sposób program ma działać.
Esencja mojego pierwszego posta w tym temacie - tylko napisana bez właściwej mi ironii :)

Ostatnia sprawa - nie ma sensu nadużywać nawiasów - szkoda klawiatury ;)
Cheers!
Awatar użytkownika
sQrtek
Sędziwy Jeż
Sędziwy Jeż
Posty: 99
Rejestracja: 13 lut 2010, 11:57
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Re: [C++] Średnia z liczb nieparzystych z przedziału 0-20

Post autor: sQrtek »

No może i faktycznie dziwnie te zmienne zainicjowałem, ale po prostu taki głupi ten przykład tego zadania był że nie wiedziałem jak go dokładnie ugryźć i jak to wszystko ma funkcjonować, może faktycznie powinienem zacząć też algorytmów się uczyć do takich skomplikowanych bardziej przykładów. Bo takie prostsze to można i w pamięci przemyśleć jak program ma działać, choć w tym przykładzie już jak widać miałem problem z takim rozwiązaniem. No ale dzięki za rady, będę dalej kodził i starał się robic progress.
Peace
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości