Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Lekcja VIII - Pętla for / problem

Ostatnio zmodyfikowano 2009-10-28 20:38
Autor Wiadomość
modzel133
Temat założony przez niniejszego użytkownika
Lekcja VIII - Pętla for / problem
» 2009-10-28 18:10:33
Mam problem z drugim zadaniem. Napisałem taki oto program:
C/C++
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int i, a, b;
   
    cout << "Podaj pierwsza liczbe: " << endl;
    cin >> a;
    cout << "Podaj druga liczbe: " << endl;
    cin >> b;
    cout << endl;
   
   
    for( i >= a; i <= b; ++i )
    for( i >= b; i <= a; ++i )
    {
        cout << endl;
        cout << "Suma liczb w przedziale od " << a << " do " << b << " wynosi: " << a + i + b;
    };
   
    getch();
    return 0;
}

Jak zrobić aby obliczyło sumę wszystkich liczb zawartych w przedziale podanym przez użytkownika?
P-11134
Elaine
» 2009-10-28 18:25:35
C/C++
// a i b to liczby podane przez użyszkodnika
int result = 0; // tu będzie wynik
// co iterację dodajemy aktualną liczbę
for( int i = a; i <= b; i++ )
     result += i;
// np. a = 2, b = 4
// pierwszy obrót pętli: i = 2, result = 2
// drugi obrót pętli: i = 3, result = 2 + 3 (czyli 5)
// trzeci obrót pętli: i = 4, result = 5 + 4 (czyli 9)
Na dobrą sprawę to nie ma co się tutaj męczyć z pętlą for - istnieje rozwiązanie działające w czasie stałym. To, co mu ty mamy, to jest najzwyklejszy ciąg arytmetyczny o różnicy 1. Z tego możemy wyciągnąć wzór na sumę 'b' pierwszych wyrazów tego ciągu: b*(b+1)/2. Ponieważ to dałoby nam sumę liczb od 'a' do 'b', musimy od tego odjąć sumę liczb od 1 do 'a - 1' - a*(a-1)/2. Po złożeniu do kupy otrzymujemy wzór "b*(b+1)/2 - a*(a-1)/2".
P-11135
modzel133
Temat założony przez niniejszego użytkownika
» 2009-10-28 18:44:09
Mimo wszystko dalej nie wiem jak.. mógłbyś podać gotowy kod z użyciem pętli FOR tak jak jest w lekcji? Byłbym bardzo wdzięczy.
P-11136
Elaine
» 2009-10-28 19:04:32
Czym jest ten kod w poście wyżej w takim razie?
P-11138
modzel133
Temat założony przez niniejszego użytkownika
» 2009-10-28 19:15:28
Chodzi o to, ze nie wiem gdzie go wkleić. Próbowałem na kilka sposobów i nadal zły wynik mi wychodzi. Jak użyć tego kodu.
/Sorry ale dopiero zaczynam naukę C++, więc proszę o wyrozumiałość.
P-11139
malan
» 2009-10-28 19:38:19
C/C++
#include <iostream>
using namespace std;
int main()
{
    int a, b, result = 0;
   
    cout << "Podaj pierwsza liczbe: " << endl;
    cin >> a;
    cout << "Podaj druga liczbe: " << endl;
    cin >> b;
   
    // Tutaj wklejasz kod, który podał 'f.a.l.'
   
    //edit:
    cout << result;
   
    getchar(); // PRAWIE jak 'getch'
    return 0;
}

P-11140
GoldWolf
» 2009-10-28 19:46:48
Twój kod zwiera elementarny błąd.

użyłeś pętli:
C/C++
for( i >= a; i <= b; ++i )
     for( i >= b; i <= a; ++i )
Powiedz mi ile jest równa wartość i. Użytkownik podaje a i b, ale ile jest równa wartość i. Więc prosiłbym byś na spokojnie przejrzał sobie ten cały kurs i poprzednie kursy bo to jest niewybaczalny błąd.
Kolega podał ci rozwiązanie jednak nie wiesz gdzie to wkleić bo nie rozumiesz błędu. Dlatego poćwicz jeszcze z tą lekcją.

Być może jeśli wprowadzisz sobie taką linijkę w kod to jakoś ci to pomoże zrozumieć, gdzie leży ten błąd.
C/C++
cin >> b;
cout << endl;
cout << i; // <- wprowadź by zobaczyć ile to jest i kilka razy skompiluj
P-11141
Elaine
» 2009-10-28 20:01:42
malan, hehe, twój kod niczego nie wypisze (a według zadania chyba powinien :>), mój kod to tylko same obliczenia, trzeba by było jeszcze dodać jakieś
cout << result;
zaraz po moim kawałku. Chyba, że to miała być pułapka na myślenie, wtedy nic nie mówiłem :>.
Aha, to coś w nawiasie obok mojego nicka (a raczej inicjałów) to taki dziwny sposób napisania "VIP", ignoruj to, gdy piszesz mój username.
P-11142
« 1 » 2
  Strona 1 z 2 Następna strona