Strona 1 z 1

jak to zrobic?

Napisane: sobota, 23 stycznia 2010, 16:05
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 !

Re: jak to zrobic?

Napisane: sobota, 23 stycznia 2010, 18:13
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;           
}

Re: jak to zrobic?

Napisane: sobota, 23 stycznia 2010, 18:40
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 ??

Re: jak to zrobic?

Napisane: sobota, 23 stycznia 2010, 19:11
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;           
}

Re: jak to zrobic?

Napisane: niedziela, 24 stycznia 2010, 09:05
przez mateusze.k
i++ w for.. a czemu ma służyć ta zmiana, mozesz mi wytlumaczyc ?
goto,ok, dzieki ;)

Re: jak to zrobic?

Napisane: poniedziałek, 25 stycznia 2010, 19:45
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

Re: jak to zrobic?

Napisane: wtorek, 26 stycznia 2010, 13:43
przez mateusze.k
Morfidon wielkie dzięki za pomoc ;)