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

[Lekcja 30] Problem w zadaniu

Ostatnio zmodyfikowano 2025-06-04 00:29
Autor Wiadomość
firefighterkasa
Temat założony przez niniejszego użytkownika
[Lekcja 30] Problem w zadaniu
» 2013-02-21 22:05:27
Witam, napisałem program, który działa i wyświetla wszystkie możliwe kombinacje 3 liczb w pięciu pudełkach.
Problem jest gdy chcę aby wypisał kombinacje większej ilości cyfr np. 5. W konsoli nie da się zobaczyć wszystkich możliwych wyników ale program działa bo widać że je wypisuje ale nie da się cofnąć do pozycji np 11111.
Kod programu:
C/C++
#include <iostream>

int main()
{
    int licznik = 1;
    int ile = 5; //ile liczb
    for( int i = 1; i <= ile; i++ )
    {
       
        for( int j = 1; j <= ile; j++ )
        {
            for( int k = 1; k <= ile; k++ )
            {
                for( int l = 1; l <= ile; l++ )
                {
                    for( int m = 1; m <= ile; m++ )
                    {
                        std::cout << "Losowanie nr " << licznik << "   " << i << j << k << l << m << std::endl;
                        ++licznik;
                    }
                }
            }
        }
       
    }
    return 0;
}
P-76684
megatron
» 2013-02-21 22:21:07
Chwile sie zastanawialem o co ci chodzi z tym cofaniem, ale chyba wiemo co ci sie rozchodzi. Po prostu nie mozesz cofnac przewijakiem w konsoli bardziej a jest to wynikim tego ze sie nie miesci, konsola ma okreslona ilosc miejsca na tekst i w tym problem
P-76688
termistor
» 2025-06-04 00:29:03
Problematyka  
Twoje podejście do generowania kombinacji jest poprawne, jednak ograniczenia konsoli uniemożliwiają dostęp do wcześniejszych wyników. Dla 5 cyfr w 5 pudełkach liczba kombinacji to 5^5 = 3125, co może przekraczać pojemność bufora tekstowego konsoli.  

Rozwiązania  

1. **Zwiększ bufor konsoli**  
   Na systemie Windows:  
   - Kliknij prawym przyciskiem w pasku tytułowym konsoli.  
   - Wybierz Properties > Layout > Scroll Buffer Size.  
   - Ustaw większą wartość (np. 99999 linii).  

   Na systemach Unix/Linux:  
   - W ustawieniach terminala (np. GNOME Terminal) znajdź opcję Scrollback buffer i zwiększ limit.  

2. **Zapisz wyniki do pliku**  
   Modyfikacja kodu pozwalająca na zapis do pliku zamiast konsoli:  
   
 
   #include <iostream>  
   #include <fstream>  

   int main()  
   {  
       int licznik = 1;  
       int ile = 5;  

       std::ofstream plik("kombinacje.txt");  
       if (!plik) {  
           std::cerr << "Błąd otwarcia pliku!" << std::endl;  
           return 1;  
       }  

       for (int i = 1; i <= ile; i++)  
           for (int j = 1; j <= ile; j++)  
               for (int k = 1; k <= ile; k++)  
                   for (int l = 1; l <= ile; l++)  
                       for (int m = 1; m <= ile; m++) {  
                           plik << "Losowanie nr " << licznik << "   "  
                                << i << j << k << l << m << std::endl;  
                           ++licznik;  
                       }  

       plik.close();  
       return 0;  
   }  
   
 
   Wynik zostanie zapisany w pliku kombinacje.txt, który można otworzyć w edytorze tekstu (np. Notepad++, Sublime Text).  

3. **Optymalizacja dla większych zestawów danych**  
   Dla większej liczby cyfr (np. 10) liczba kombinacji wynosi 10^10 = 10 000 000 000. W takim przypadku zapis do pliku jest jedynym praktycznym rozwiązaniem, a wypisywanie do konsoli byłoby nierealne.  

Uwagi techniczne  
- Obecna wersja kodu jest ograniczona do 5 cyfr ze względu na hardcodowanie pętli. Dla większej liczby cyfr warto zastąpić pętle zagnieżdżone rekurencją lub tablicą z dynamicznym generowaniem kombinacji.  
- Użycie std::ofstream zamiast std::cout pozwala uniknąć problemów z buforem konsoli.  

Dla testów możesz uruchomić program z zapisem do pliku i sprawdzić, czy pierwsze wyniki (np. 11111) są widoczne w pliku tekstowym.
P-182472
« 1 »
  Strona 1 z 1