[C++] Działanie programu różne z wykorzystaniem funkcji i bez.
Ostatnio zmodyfikowano 2013-11-21 11:43
waldorm Temat założony przez niniejszego użytkownika |
[C++] Działanie programu różne z wykorzystaniem funkcji i bez. » 2013-11-20 05:02:25 Witam, gdy pisałem ostatnio ćwiczeniowe programy na uczelnie zauważyłem coś takiego że dany program napisany za pomocą funkcji bywa, że ma inny efekt niż bez wykorzystania funkcji... Dla przykładu: Program napisany z wykorzystaniem funkcji: #include <iostream>
using namespace std;
void write( int tab[] ) { float a, srednia; for( int i = 0; i < 1010; i++ ) { cin >> tab[ i ]; if( tab[ i ] >= 2 && tab[ i ] <= 5 ) a += tab[ i ]; else if( tab[ i ] == 1 ) { srednia = a / i; cout.precision( 3 ); cout << srednia << endl; i--; } else if( tab[ i ] == 0 ) { for( i = 0; tab[ i ] > 0; i++ ) { cout << tab[ i ] << " "; } cout << endl; i--; } else if( tab[ i ] == - 1 ) break; } }
int main() { int oceny[ 1010 ]; write( oceny ); } Ma inne działanie niż program napisany bez tej funkcji: #include <iostream>
using namespace std;
int main() { int oceny[ 1010 ]; float a, srednia; for( int i = 0; i < 1010; i++ ) { cin >> oceny[ i ]; if( oceny[ i ] >= 2 && oceny[ i ] <= 5 ) a += oceny[ i ]; else if( oceny[ i ] == 1 ) { srednia = a / i; cout.precision( 3 ); cout.setf( ios::showpoint ); cout << srednia << endl; i--; } else if( oceny[ i ] == 0 ) { for( i = 0; oceny[ i ] > 0; i++ ) { cout << oceny[ i ] << " "; } cout << endl; i--; } else if( oceny[ i ] == - 1 ) break; } return 0; } Potrafi mi ktoś wytłumaczyć dlaczego takie zjawisko powstaje? |
|
Monika90 |
» 2013-11-20 09:13:59 W obydwu programach występuje odczyt z niezainicjalizowanej zmiennej, dlatego ich zachowanie jest całkowicie dowolne. |
|
waldorm Temat założony przez niniejszego użytkownika |
» 2013-11-20 11:57:39 Możesz powiedzieć w którym miejscu? |
|
Monika90 |
» 2013-11-20 12:10:00 Tu a += tab[ i ] i tu a / i i tu tab[ i ] > 0 i (co zależy od wersji języka) w wielu innych miejscach. EDIT: tab[ i ] > 0 to akurat jest OK :) |
|
waldorm Temat założony przez niniejszego użytkownika |
» 2013-11-20 12:16:31 Mogłabyś wytłumaczyć jaśniej?:) Jestem dość początkujący i nie rozumiem. Przez inicjalizacje rozumiem nadanie wartości zmiennej, czyli jak mam nadać wartość zmiennej 'a' jeśli ja po prostu sumuje wartości które są w tablicy, do której wartości przypisywane są przez użytkownika? |
|
Monika90 |
» 2013-11-20 12:21:28 Jeżeli używasz zmiennej a jako akumulatora, to musisz jej nadać wartość początkową. Np. float a = 0, srednia; |
|
waldorm Temat założony przez niniejszego użytkownika |
» 2013-11-20 12:38:55 Aha, rozumiem tylko najlepsze to jest to, że ten program w funkcji źle działa a program bez funkcji dobrze działa a w obydwu ten sam błąd. |
|
Monika90 |
» 2013-11-20 12:45:42 ich zachowanie jest całkowicie dowolne. |
Zatem może być i takie, które ty uważasz za poprawne. A w ogóle skąd wiesz, że działa dobrze? |
|
« 1 » 2 |