Crassus Temat założony przez niniejszego użytkownika |
Materiały dodatkowe Kurs XVII i XVIII - podsumowanie zadanie 1 » 2011-09-21 14:40:39 Witam jest takie zadanie: Napisz program obliczający średnią Twoich ocen ze świadectwa(indeksu). Program ma pobierać tak długo liczby, aż podasz liczbę zero. Program ma posiadać funkcję sprawdzającą czy podany dane są liczbami, czyli ma zapobiegać uszkodzenia strumienia wejściowego.Nie wiem jak zrobic ostatnia rzezcz mianowicie doprowadzic do zaprzestania wprowadzania ocen przy wprowadzeniu 0, probowalem roznych sposobow, poprawcie, doradzcie. A to mój kod:
#include<iostream> #include<conio.h> #include<cmath>
using namespace std;
float oceny( float t[] ) { cout << "Wprowadzaj oceny: " << endl; int ile = 10; for( int i = 0; i < ile; i++ ) { a: cin >> t[ i ]; bool czylicz = cin.good(); cin.clear(); cin.sync(); switch( czylicz ) { case 0: cout << "Wprowadzaj liczby zeczywiste!!" << endl; goto a; break; default: break; } } return 0; } float srednia( float t[] ) { float suma; float srednia; int ile = 10; for( int i = 0; i < ile; i++ ) { suma += t[ i ]; } srednia = suma / ile; cout << "Srednia ocen: " << srednia << endl; return 0; } int main() { float k[ 10 ]; cout << "Program przyjmuje oceny do podania 0," << endl; cout << "co konczy wprowadzanie i powoduje podanie sredniej" << endl; oceny( k ); srednia( k ); getch(); return 0; }
|
|
DejaVu |
» 2011-09-21 14:44:58 Użyj pętli do ... while |
|
Crassus Temat założony przez niniejszego użytkownika |
Odp » 2011-09-21 15:04:49 No dobra tak tez robilem, ale wpisuje 0 i moge dalej wpisywac, czy potrzebna mi jakas zm,pomocnicz, czy cos, warunek while(k != 0)czy wskaznik czy cokolwiek innego nie pomaga. Chyba sie zawiesilem, prosze o sugestie, bede wdzienczny. int main() { float k[ 10 ]; cout << "Program przyjmuje oceny do podania 0," << endl; cout << "co konczy wprowadzanie i powoduje podanie sredniej" << endl; do { oceny( k ); } while( * k != '0' ); srednia( k ); getch(); return 0; } Nie stety nie rozumiem co ma Pan na mysli, w takim układzie program konczy przyjmowanie 10 ocen po czym ponawia komunikat i zapisuje tab od nowa. Prosze wyjasnic gdzie to 48 mam wpisac. Po wypelnieniu tablicy samymi 48 wyszla srednia 48 i petla sie zakonczyla, wiem ze cyfra 0 na klaw. ma kod ASCII 48, ale dalej nie kapuje, jak rozwiazac problem i dlaczego program tak sie zachowal, wszak po odstawieniu w warunku konczacym z *k != '0' na *k != 0 dalej nie ma spodziewanego efektu.... |
|
DejaVu |
» 2011-09-21 15:23:59 Wpisz 48 przy takim kodzie i zobacz czy pętla została zakończona. Później zastanów się dlaczego :)
/edit:
Wpisz przy wprowadzaniu oceny wartość 48 zamiast 0. |
|
Crassus Temat założony przez niniejszego użytkownika |
Odp2 » 2011-09-21 16:02:02 Po wypelnieniu tablicy samymi 48 wyszla srednia 48 i petla sie zakonczyla, wiem ze cyfra 0 na klaw. ma kod ASCII 48, ale dalej nie kapuje, jak rozwiazac problem i dlaczego program tak sie zachowal, wszak po odstawieniu w warunku konczacym z *k != '0' na *k != 0 dalej nie ma spodziewanego efektu....Nawet jak zrobie *k != '48'??? Prosze podac jakies blizsze rozwiazaniu info. |
|
DejaVu |
» 2011-09-21 16:11:43 '0' <= znak => kod znaku = 48
0 <= cyfra |
|
Crassus Temat założony przez niniejszego użytkownika |
Odp3 » 2011-09-21 16:16:54 W dalszym ciagu nie mam pojecia jak sie do tego zabrac, k!=0 nic nie daje, prosze o czysta sciagawke, zapamietam to na dlugo......;) Podejrzewam ze czegos mi tu brakuje ale czego? |
|
DejaVu |
» 2011-09-21 16:22:37 float xxx; do { std::cin >> xxx; } while( xxx != 0 ); |
|
« 1 » 2 |