Úloha č. 6


Název úlohy: Sedmička řetězců
Datum: 10.11.1997
Obtížnost: S
Předpokládané znalosti: cykly, podmíněné příkazy, typ string, readkey, succ


Zadání
Kromě práce s čísly musí programátor umět pracovat i se znaky a souborz řetězců. Ve velkém množství případů zjístíte, že práce se znaky je obdobná práci s čísly a práce s řetězci znaků obdobná práci s polem. Zde vám nabízím 7 úloh, zachycující základní operace s řetězci.

Dílčí zadání

  1. Napište jednoduchý program, který vypíše na obrazovku anglickou abecedu velkých písmen. K řešení použijte cyklů:
  2. Vytvořte program, který vyzve uživatele, aby zadal větu a on vypíše počet slov ve větě.
  3. Řešte program pro vyhodnocení věty. Uživatel zadá větu a program vypíše počet velkých písmen, malých písmen a číslic.
  4. Vytvořte program, který bude simulovat zadávání hesla, a to tak, že program vyzve uživatele, aby zadal heslo, a místo znaků se budou na obrazovku vypisovat hvězdičky
  5. Napište program, který vyzve uživatele, aby zadal posloupnost jmen a program pak vypsal prvni jmeno v abecednim poradi a posledni jmeno v abecede.
  6. Z klávesnice je zadávána řada písmen velké abecedy ukončená znakem "*". Vypište tato písmena na obrazovku podle abecedy tak, aby se opakující písmena tiskla pouze jednou.
  7. Na vstupu počítače je řada řetězců o maximální délce 28 znaků. Poslední řetězec je "*". Přepisujte tyto řetězce na obrazovku tak, že velká písmena nahradí malými. (Např.: AhoJ.Lide - ahoj.lide)
Nástin řešení
  1. cyklus pro vypsání abecedy by mohl být:
    for I:='A' to 'Z' do write(I:2,' ');
    nebo
    I:='A'';
    while I<='Z' do
    begin
    write(I:2,' '); I:=succ(I);
    end;
  2. hlavní část programu bude spočívat ve zjištění počtu mezer. potom odečteme jedničku a dostaneme počet slov.
    pocet:=0;
    for I:=1 to Length(s) do
    if s[I]=' ' then inc(pocet);
    dec(pocet); writeln(pocet);
  3. bude se procházet znak po znaku v řetězci a vždy se porovná, do které kategorie znaků patří.
    mala:=0;
    velka:=0;
    cisla:=0;
    for I:=1 to Length(S) do
    case s[I] of
    'A'..'Z': inc(velka);
    'a'..'z': inc(mala);
    '0'..'9': inc(cisla);
    end;

    writeln(velka:2, mala:2, cisla:2);
  4. funkce pro čtení stisku klávesy a vrácení její znakové reprezentace je readkey která je dostupná v jednotce Crt. hlavní část programu pak bude vypadat takto:
    znak:=readkey;
    heslo:='';
    while znak<>#13 do
    begin
    heslo:=heslo+znak;
    write('*');
    znak:=readkey;
    end;
  5. Postup hledání extrému (maxima, minima) zůstává stejný jako u celočíselných údajů. Zadávání bude ukončeno znakem "*". Hlavní program pak bude vypadat takto: (předpokládáme zadávání malých písmen)
    program Jmena;
    var prvni, posledni, cteny: string;
    begin
    prvni:='zzz';
    posledni:='';
    readln(cteny);
    while cteny[1]<>'*' do
    begin
    if Cteny<prvni then prvni:=cteny;
    if cteny>posledni then posledni:=cteny;
    end;

    writeln(' Prvni v abecede je: ',prvni,' a posledni ',posledni);
    end;
  • Tytu příklady jsou na ověření, zda-li jste dobře pochopili problematiku práce s řetězci. Tyto úlohy nejsou těžké, pro jejich řešení můžete využít cykly, podmíněné příkazy a popř. použití pole. V úloze č.7 vám přijdou vhod funkce ord,chr




    [Archív] [Změna kódování]