Pominięcie znaków w string

0

Mam do wykonania takie zadanie:
Wyprowadź słownie wartość przeczytanego znaku ze zbioru znaków numerycznych (0-9), pomijając inne znaki, jeżeli zostaną wprowadzone.

I właśnie z tym pomijaniem znaków jest problem.

program wartosc_znaku;

var
liczba:integer;
wartosc:string;

begin
Writeln ('wybierz liczbe, ktora odczytasz:');
Writeln ('1,2,3,4,5,6,7,8,9');
Readln (liczba);
Writeln ('wpowadz wartosc slowie');
readln (wartosc);
Case liczba of
1: begin
if (wartosc = 'jeden') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
2:begin
 if (wartosc = 'dwa') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
3:begin
 if (wartosc = 'trzy') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
4:begin
if (wartosc = 'cztery') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
5:begin
 if (wartosc = 'piec') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
6:begin
if (wartosc = 'szesc') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                  end;
7:begin
if (wartosc = 'siedem') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
8:begin
if (wartosc = 'osiem') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
9:begin
if (wartosc = 'dziewiec') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                  end;
10:begin
if (wartosc = 'dziesiec') then
                 writeln('dobrze')
                 else
                 writeln ('zle');
                 end;
else
write('blad');
end;
readln;
end
0

cóz, z tego co widzę, to nie jest problem z pomijaniem tylko ze zrozumieniem tematu. Masz wypisać tekstowo daną cyfrę wprowadzoną jako znak. A Ty każesz użytkowi wpisać i jedno i drugie i sprawdzasz czy dobrze wpisał:)

0

Usuwanie niepotrzebnych znaków jest banalne:
1.Wczytać tekst do zmiennej text.
2.Ustawić zmienną tekstową (string) o nazwie number na '' (pusty ciąg znaków).
3.Przeiterować każdy znak ze zmiennej text i jeżeli jest on z zakresu '0'..'9', dodać do zmiennej number.
Tak kod prezentuje się we Free Pascalu (przy włączonych c-style-operators):

Function UsunNiepotrzebne(const Text: String): String;
Var Ch: Char;
Begin
 Result := ''; // 2

 For Ch in Text Do // 3a
  if (Ch in ['0'..'9']) Then // 3b
   Result += Ch; // 3c
End;

Zmiana na wartość słowną jest jeszcze prostsza:

const Literaly: Array['0'..'9'] of String = ('zero', 'jeden', 'dwa', 'trzy', ...);
if (Length(Number) = 0) Then
 Halt(-1) Else
 Writeln(Literaly[Number[1]]);
0

@diego9403:

  1. O BANALNE PODSTAWY PYTAMY W DZIALE NEWBIE!!!
  2. KOD FORMATUJEMY (LUB UŻYWAMY DO TEGO NARZĘDZI).
  3. KOD WKLEJAMY W ODPOWIEDNIE ZNACZNIKI (tutaj 'delphi').
  4. O tablicach nie słyszał? Po co tworzyć takiego "potworka". Zobacz...
program uzywaj_tbrain;

{$APPTYPE CONSOLE}

uses
  Windows;

const
  Digits_Arr : array['0'..'9'] of string =
    (
    'zero', 'jeden', 'dwa', 'trzy', 'cztery',
    'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć'
    );

function OEMWrite(AnsiText : string) : string;
begin
  Result := '';
  if AnsiText <> '' then
  begin
    SetLength(Result, Length(AnsiText));
    AnsiToOEM(PChar(AnsiTexT), PChar(Result));
  end;
end;

var
  I, L : integer;
  InputStr : string;
begin
  Write(OEMWrite('Wpisz tekst zawierający znaki od "0" do "9": '));
  Readln(InputStr);
  L := Length(InputStr);
  if L > 0 then
  begin
    for I := 1 to L do
    begin
      if InputStr[I] in ['0'..'9'] then
      begin
        Write(OEMWrite(Digits_Arr[InputStr[I]] + ' '));
      end;
    end;
  end
  else
  begin
    Writeln(OEMWrite('Nic nie wpisałeś!'));
  end;
  Writeln;
  Writeln(OEMWrite('Naciśnij enter.'));
  Readln;
end.

Kod kompilowany pod Delphi 7. Prościej i optymalniej wedlug mnie. O ile rozumiem treść zadania. A pierwsze trzy punkty to się muszę na Was drzec, bo można to pisać po 97765487523 razy, a i tak - jak widzę - nie dociera do wielu :/ I na przyszłość. Czy używasz Delphi, czy Lazarusa, czy FPC, czy nawet przedpotopowych Dev-Pas albo Turbo Pascala. Musisz mieć zainstalowany komponent TBrain i go używać :) Zanim napiszesz na jakiekolwiek forum z jakim kolwiek problemem. Należy pokombinować samodzielnie. A jeżeli się nie wie jak to pogooglować, poczytać kurs z podstawami. Ale do wszystkiego potrzebny jest TBrain. I należy dbać aby mieć go w jak najlepiej "rozbudowanej" wersji, co można osiągnąc przede wszystkim przez samodzielne myślenie :)

@Patryk27 mnie ubiegł, ale chwilę zajeło mi pisanie umoralniania. Bo niestety pytający źle zainstalował TBrain u siebie chyba. I za pewne stąd te Jego "problemy" ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1