GRY-Online.pl --> Archiwum Forum

C++ ratunku!

14.10.2007
13:55
smile
[1]

Szymooo [ Legionista ]

C++ ratunku!

hej mam wielki problem bo musze napisać prosty program do obliczania średniej w c++.
Jeśli się ktoś zna na tym to bardzo proszę o pomoc.
program ma obliczać srednią z dowolnej ilości wpisanych liczb.
help

19.10.2007
14:54
[2]

N2 [ negroz ]

Nie chce zakładać nowego tematu, a seryjnego wątku nt. programowania doszukać się nie mogę.

Ostatnio trapiło mnie kilka pytań odnośnie niektórych sytuacji z c, stąd też napisałem kilka prostych programików i defakto w każdnym z nich byłem w stanie po kilkugodzinnych próbach stwierdzić dlaczego dzieje się tak a nie inaczej, ale za cholerę nie mogę zrozumieć, w jednym z przypadków, a o nim za chwile.
Pytałem naszego magristra na wykładach, nie potrafił odpowiedzieć mi na pytanie. W gruncie rzeczy braliśmy to na pierwszym roku, ale nie ważne.

Dlaczego mimo zadeklarowania zmiennej typu float dla zmiennej "d", za cholerę po wykonaniu operacji dzielenie nie chce pokazać dokładnej wartości po przecinku. Zaznaczam, iż nie chce wyciągać osobno modulo.

#include <iostream.h>
#include <conio.h>
#include <dos.h>
void main()

clrscr();

int a,b,c;
float d;

while (1)

cout<<"Wybierz rodzaj operacji: \n1- dodawanie\n2- odejmowanie\n3- mnozenie\n4- dzielenie\n5- wyjscie z programu\n";
while (1)

cout<<"Wpisz numer operacji (i nacisnij ENTER): ";
cin>>a;
switch (a)

case 1:
cout<<"Wybrales rodzaj operacji - dodawanie\nPodaj liczbe a: ";
cin>>b;
cout<<"Podaj liczbe b: ";
cin>>c;
cout<<"Wynik dodania dwoch liczb to: "<<b+c<<"\n";
break;
case 2:
cout<<"Wybrales rodzaj operacji - odejmowanie\nPodaj liczbe a: ";
cin>>b;
cout<<"Podaj liczbe b: ";
cin>>c;
cout<<"Wynik odejmowania dwoch liczb to: "<<b-c<<"\n";
break;
case 3:
cout<<"Wybrales rodzaj operacji - mnozenie\nPodaj liczbe a: ";
cin>>b;
cout<<"Podaj liczbe b: ";
cin>>c;
cout<<"Wynik mnozenia dwoch liczb to: "<<b*c<<"\n";
break;
case 4:
cout<<"Wybrales rodzaj operacji - dzielenie\nPodaj liczbe a: ";
cin>>b;
do

cout<<"Podaj liczbe b: ";
cin>>c;
if (c<=0)
cout<<"Nie dzielimy przez 0\n\a";

while (c<=0);
d=b/c;
cout<<"Wynik dzielenia dwoch liczb to: "<<d<<"\n";
break;
case 5:
goto koniec;
break;
default:
cout<<"niepoprawny wybor operacji\n";
break;




getch();

koniec:

20.10.2007
03:47
smile
[3]

N2 [ negroz ]

UP

Szymanooo -> z nudów napisalem, ale chyba juz za późno, co?

#include<iostream.h>
#include<conio.h>
void main()

clrscr();
float ocena=0,srednia=0,ilosc=0,suma=0;

do

cout<<"Podaj ocene (0- koniec wprowadzania): "<<endl;
cin>>ocena;
ilosc+=1;
suma+=ocena;

while (ocena!=0);
ilosc-=1;
srednia=(suma/ilosc);
cout<<"Ilosc podanych ocen: "<<ilosc<<endl;
cout<<"Srednia wynosi: "<<srednia<<endl;

getch();

20.10.2007
07:14
[4]

PAW666THESATAN [ PIF PAF ]

N2 -> a próbowałeś zamienić zmienne b i c na tym float ? Lub najlepiej na double ?


Sprawdź:

#include <iostream.h>
#include <conio.h>
#include <dos.h>
void main()

clrscr();

int a,b,c;
double d,e,f;

while (1)

cout<<"Wybierz rodzaj operacji: \n1- dodawanie\n2- odejmowanie\n3- mnozenie\n4- dzielenie\n5- wyjscie z programu\n";
while (1)

cout<<"Wpisz numer operacji (i nacisnij ENTER): ";
cin>>a;
switch (a)

case 1:
cout<<"Wybrales rodzaj operacji - dodawanie\nPodaj liczbe a: ";
cin>>b;
cout<<"Podaj liczbe b: ";
cin>>c;
cout<<"Wynik dodania dwoch liczb to: "<<b+c<<"\n";
break;
case 2:
cout<<"Wybrales rodzaj operacji - odejmowanie\nPodaj liczbe a: ";
cin>>b;
cout<<"Podaj liczbe b: ";
cin>>c;
cout<<"Wynik odejmowania dwoch liczb to: "<<b-c<<"\n";
break;
case 3:
cout<<"Wybrales rodzaj operacji - mnozenie\nPodaj liczbe a: ";
cin>>b;
cout<<"Podaj liczbe b: ";
cin>>c;
cout<<"Wynik mnozenia dwoch liczb to: "<<b*c<<"\n";
break;
case 4:
cout<<"Wybrales rodzaj operacji - dzielenie\nPodaj liczbe a: ";
cin>>e;
do

cout<<"Podaj liczbe b: ";
cin>>f;
if (f<=0)
cout<<"Nie dzielimy przez 0\n\a";

while (f<=0);
d=e/f;
cout<<"Wynik dzielenia dwoch liczb to: "<<d<<"\n";
break;
case 5:
goto koniec;
break;
default:
cout<<"niepoprawny wybor operacji\n";
break;




getch();

koniec:

20.10.2007
08:42
[5]

Regis [ ]

Pytałem naszego magristra na wykładach, nie potrafił odpowiedzieć mi na pytanie.

Wspolczuje takich magistrow, pytanie nie powinno zaskoczyc nikogo, kto ma jakies pojecie o programowaniu. A dlaczego wartosc jest niedokladna? Bowynik dzielenia dwoch liczb calkowitych tez musi byc calkowity - po prostu. Jesli chcesz otrzymac wynik typu float, a dzielna i dzielnik masz typu calkowitego, to musisz zrzutowac przynajmniej jedna z liczb (np. dzielna) na ten typ.

A za uzywanie takich konstrukcji:

goto koniec;

w C/C++ i innych jezykach wysokiego poziomu, powinno sie karac wiezieniem...

20.10.2007
14:03
smile
[6]

N2 [ negroz ]

A dlaczego wartosc jest niedokladna? Bowynik dzielenia dwoch liczb calkowitych tez musi byc calkowity - po prostu. Jesli chcesz otrzymac wynik typu float, a dzielna i dzielnik masz typu calkowitego, to musisz zrzutowac przynajmniej jedna z liczb (np. dzielna) na ten typ.

O kurcze.
To też próbowałem, tylko wiecie co. Zmieniłem wszystkie typy zmiennych na float, i wykaszaniał się kod, już znam odpowiedź dlaczego, w switchu, nie może być zmienna typem zmienno-przecinkowym float. Musi być całkowita. Fuck taka prosta z pozoru rzecz.
Dzięki za pomoc

ps
Regis, wiem, ze są funkcje, ale goto w tak prostym kodzie nie zaszkodzi użyć.

© 2000-2024 GRY-OnLine S.A.