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

Lekcja 30 - zadanie 2

Ostatnio zmodyfikowano 2012-10-25 18:52
Autor Wiadomość
Berux
Temat założony przez niniejszego użytkownika
Lekcja 30 - zadanie 2
» 2012-10-25 15:59:39
Witam! Zabrałem się za rozdział 30 tutejszego kursu, ale przy zadaniu 2 napotkałem problem. Oto kod mojego programu:

C/C++
#include <iostream>

using namespace std;

int main()
{
    for( int z1 = 1; z1 <= 5; z1++ )
    {
        for( int z2 = 1; z2 <= 5; z2++ )
        {
            if( z2 == z1 )
                 continue;
           
            for( int z3 = 1; z3 <= 5; z3++ )
            if( z3 == z1 || z3 == z2 )
                 continue;
           
            cout << z1 << " " << z2 << " " << z3 << endl;
           
           
        }
    }
    return 0;
}

A oto treść zadania:

Wyobraź sobie, że masz pięć piłek i chcesz wylosować trzy z nich. Napisz program, który wypisze na ekranie wszystkie możliwe kombinacje piłek jakie można wylosować.


Log kompilacji, według którego w programie jest błąd:

C:\Users\Admin\Desktop\Kurs C++\Lekcja 30\Zadania Dom\Zad2\Zad.cpp: In function 'int main()':
C:\Users\Admin\Desktop\Kurs C++\Lekcja 30\Zadania Dom\Zad2\Zad.cpp:18: error: name lookup of 'z3' changed for ISO 'for' scoping
C:\Users\Admin\Desktop\Kurs C++\Lekcja 30\Zadania Dom\Zad2\Zad.cpp:18: note: (if you use '-fpermissive' G++ will accept your code)
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings

Proszę o pomoc, z góry dziękuję.

P-67470
Savail
» 2012-10-25 16:08:01
zmienna z3 istnieje tylko wewnątrz pętli.
P-67472
Berux
Temat założony przez niniejszego użytkownika
» 2012-10-25 16:14:45
Rzeczywiście zapomniałem o klamrze, poprawiłem to ale nic mi nie wypisuje, kod:

C/C++
#include <iostream>

using namespace std;

int main()
{
    for( int z1 = 1; z1 <= 5; z1++ )
    {
        for( int z2 = 1; z2 <= 5; z2++ )
        {
            if( z2 == z1 )
                 continue;
           
            for( int z3 = 1; z3 <= 5; z3++ )
            if( z3 == z1 || z3 == z2 )
            {
                continue;
               
                cout << z1 << " " << z2 << " " << z3 << endl;
            }
           
        }
    }
    return 0;
}
P-67474
jsc
» 2012-10-25 16:20:17
continue; każe pętli zacząć nowe cykl pomijając resztę bieżącego.
P-67478
Savail
» 2012-10-25 16:20:33
Wstawiłeś continue; tuż przed wypisaniem w 1 warunku... Powinieneś to rozdzielić na 2 warunki i zawrzeć je w tej pętli.
C/C++
if(...)
     continue;
else
     cout <<...
P-67479
Berux
Temat założony przez niniejszego użytkownika
» 2012-10-25 16:32:46
Zauważyłem, że postawiłem klamrę do if, a nie do for, rozwiązało to problem. Kod:
C/C++
#include <iostream>

using namespace std;

int main()
{
    for( int z1 = 1; z1 <= 5; z1++ )
    {
        for( int z2 = 1; z2 <= 5; z2++ )
        {
            if( z2 == z1 )
                 continue;
           
            for( int z3 = 1; z3 <= 5; z3++ )
            {
                if( z3 == z1 || z3 == z2 )
                     continue;
               
                cout << z1 << " " << z2 << " " << z3 << endl;
               
            }
           
           
        }
    }
    return 0;
}

Dzięki za pomoc.

/edit:

a jednak nie rozwiązało problemu, bo wypisuje 1 2 3 oraz 1 3 2 - a to to samo.

/edit: spróbowałem też zrobić tak ja mówiliście, ale to nic nioe pomogło
P-67484
jsc
» 2012-10-25 16:44:51
To już musisz zrobić sobie jakiegoś wektora, posortować (dla prostego wyszukiwania) rosnąco lub malejąco bieżący wynik, sprawdzić czy jest już zapisany i jeśli go tam nie ma dopisać.
P-67485
krzyk
» 2012-10-25 16:48:16
Wróć do pierwszej wersji i zadeklaruj zmienną z3 nad forem.
P-67486
« 1 » 2
  Strona 1 z 2 Następna strona