Zadání příkladu
Program vyzve uživatele k zadání celých kladných čísel. Čísla budou oddělena mezerou (případně enterem). Čísel může být libovolný počet. Čísla budou ukončena nulou. Program zjistí nejdelší shodný úsek posloupnosti čísel a vypíše délku tohoto nejdelšího úseku. Např. pro zadaná čísla „5 7 7 1 1 1 3 3 4 8 7 7 7 7 9 0“ vypíše „4“, protože nejdelší stejný úsek čísel je „7 7 7 7“ a jeho délka je čtyři.
Řešení ve Free Pascalu
program souvislyUsek; uses crt; var delkaAkt, delkaNej, cislo, prevCislo: integer; begin clrScr; delkaAkt := 0; delkaNej := 0; prevCislo := 0; write('Zadejte kladna cela cisla oddelena mezerou ukoncena nulou: '); read(cislo); while cislo <> 0 do begin if cislo = prevCislo then begin delkaAkt := delkaAkt + 1; end else // mame novy usek begin if delkaAkt > delkaNej then delkaNej := delkaAkt; delkaAkt := 1; end; prevCislo := cislo; read(cislo); end; // pro pripad, ze by nejdelsi usek byl na konci if delkaAkt > delkaNej then delkaNej := delkaAkt; writeln('Delka nejdelsiho useku je: ', delkaNej); repeat until keyPressed; end.
Spuštění programu
Zadejte kladna cela cisla oddelena mezerou ukoncena nulou: 5 7 7 1 1 1 3 3 4 8 7 7 7 7 9 0 Delka nejdelsiho useku je: 4
Poznámky
Program si musí pamatovat aktuálně načtené číslo a předchozí číslo. Porovnáním těchto dvou čísel zjistí, zda pokračuje stejný úsek čísel, či již začíná nový úsek. Co se týká samotného nejdelšího shodného úseku, tak je zapotřebí si pamatovat pouze délku (počet čísel) v nejdelším úseku a délku aktuálně čteného úseku číslic. Tyto délky se porovnají, jakmile narazíme na nové číslo. Je třeba dát pozor na inicializaci proměnných a jejich správné naplnění a další jejich změny. Při řešení je třeba dát pozor i na to, když nejdelší shodný úsek bude na konci posloupnosti čísel.