Pascal - délka nejdelšího stejného úseku

Datum vydání: 2012-10-28 14:48:29; aktualizováno: 2012-10-28 14:56:46

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.