jak to zrobic?

Problemy i ich rozwiązania w C++.
mateusze.k
Początkujący
Początkujący
Posty: 5
Dołączył(a): piątek, 22 stycznia 2010, 23:51

jak to zrobic?

Post przez mateusze.k »

Code: Zaznacz cały

double petla(double n, double a) //dodaje n liczb wiekszych od 0 podanych przez uzytkownika
{       
      cout << "Ile liczb chcesz wczytac ?" << endl;
      cin >> n;
      
      for ( int i = 1; i <= n; i++ )
      {
          cout << "Podaj " << i << " liczbe" << endl;
          cin >> a;
          
          if ( a > 0 ) // sprawdzy czy podana liczba jest wieksza od 0
          {
           
              double suma = suma + a;     
          } else {
                 cout << " podales zla liczbe" << endl;
                 }
      }    
      double suma; 
      return suma;            
}
Nie wiem jak zrobić, aby w chwili podania liczby minusowej pojawiał się tekst "podales zla liczbe, liczba musi byc wieksza od 0. Wprowadz licbe ponownie", i zeby ten tekst wyswietlal sie do czasu az uzytkownik poda poprawna liczbę.

Z góry dziękuję za pomoc !
mateuszt
Nowicjusz
Posty: 2
Dołączył(a): sobota, 23 stycznia 2010, 17:48

Re: jak to zrobic?

Post przez mateuszt »

Code: Zaznacz cały

double petla(double n, double a) //dodaje n liczb wiekszych od 0 podanych przez uzytkownika
{       
      cout << "Ile liczb chcesz wczytac ?" << endl;
      cin >> n;
           
      for ( int i = 1; i <= n;  )
      {
          cout << "Podaj " << i << " liczbe" << endl;
          cin >> a;

          if ( a > 0 ) // sprawdzy czy podana liczba jest wieksza od 0
          {
           
              double suma = suma + a;
              i++; 
          } else {
                 cout << "podales zla liczbe, liczba musi byc wieksza od 0. Wprowadz licbe ponownie" << endl;
                 }
      }   
      
      
      double suma;
      return suma;           
}
mateusze.k
Początkujący
Początkujący
Posty: 5
Dołączył(a): piątek, 22 stycznia 2010, 23:51

Re: jak to zrobic?

Post przez mateusze.k »

Czy coś poprawiłeś po za

Code: Zaznacz cały

  cout << "podales zla liczbe, liczba musi byc wieksza od 0. Wprowadz licbe ponownie" << endl;
;) Z tym sobie poradzę ;p
...

W pascalu było coś takiego jak KOTWICE, w c++ jest jakiś odpowiednik ? :)
po wpisaniu liczby -3 wracamy do miejsca gdzie podaje się liczbę i tak do skutku aż spełniony zostanie warunek ??
mateuszt
Nowicjusz
Posty: 2
Dołączył(a): sobota, 23 stycznia 2010, 17:48

Re: jak to zrobic?

Post przez mateuszt »

i++ w for.. chyba nie zauważyłeś zmiany.

W c++ masz instrukcje goto.
np.

Code: Zaznacz cały

double petla(double n, double a) //dodaje n liczb wiekszych od 0 podanych przez uzytkownika
{       
      cout << "Ile liczb chcesz wczytac ?" << endl;
      cin >> n;
           
      for ( int i = 1; i <= n; i++ )
      {   
          a:
          cout << "Podaj " << i << " liczbe" << endl;
          cin >> a;

          if ( a > 0 ) // sprawdzy czy podana liczba jest wieksza od 0
          {
           
              double suma = suma + a;
              
          } else {
                 cout << "podales zla liczbe, liczba musi byc wieksza od 0. Wprowadz licbe ponownie" << endl;
                 goto a; 
                 }
      }   
     
     
      double suma;
      return suma;           
}
mateusze.k
Początkujący
Początkujący
Posty: 5
Dołączył(a): piątek, 22 stycznia 2010, 23:51

Re: jak to zrobic?

Post przez mateusze.k »

i++ w for.. a czemu ma służyć ta zmiana, mozesz mi wytlumaczyc ?
goto,ok, dzieki ;)
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: jak to zrobic?

Post przez Morfidon »

Code: Zaznacz cały

#include <iostream>

using namespace std;

double petla(/* 1) double n, double a*/) //dodaje n liczb wiekszych od 0 podanych przez uzytkownika
{       
      double suma = 0, n, a; //2)

      cout << "Ile liczb chcesz wczytac ?" << endl;
      cin >> n;
      
      for ( int i = 1; i <= n; i++ )
      {
          do
          {
            cout << "Podaj " << i << " liczbe" << endl;
            cin >> a;
            
          } while(a < 0);
          
          suma += a;
      }    
      // 3) double suma; 
      return suma;            
}

int main()
{
    cout << petla() << endl;  //4)
}
Instrukcji goto się nie używa w takich sytuacjach. Goto używa się jeżeli chce się wyjść z 4+ zagnieżdżonych pętli, a nawet wtedy powinno się tego unikać bo niszczy ona czytelność kodu. Lepiej użyj po prostu pętli while.

Skomentowałem napisany kod.

3) Uważaj na sposób definicji zmiennych, to jak to Ty zrobiłeś jest nieprawidłowe, bo w takim wypadku zdefiniowałeś zmienną, która by nie dość że nie miała pewnej wartości, to zniszczyłoby by Ci to co wykonałeś powyżej w pętli, lepiej to zrobić tak jak pokazałem w 2).

Zauważ, że wywołanie Twojej funkcji (4), raczej wygląda trochę inaczej, także definicja zmiennych powinna wyglądać nie tak jak skomentowałem w p. 1) tylko tak jak w p. 2. Zwróć uwagę że napisałem double suma = 0.

Pozdrawiam,

Arkadiusz
mateusze.k
Początkujący
Początkujący
Posty: 5
Dołączył(a): piątek, 22 stycznia 2010, 23:51

Re: jak to zrobic?

Post przez mateusze.k »

Morfidon wielkie dzięki za pomoc ;)
Post Reply