Помогите со строками в паскале

Тема в разделе "Pascal and Delphi", создана пользователем neomax38, 15 дек 2010.

  1. neomax38

    neomax38 Гость

    Сформировать новую строку из слов, состоящих только из латинских букв, и длиной не более 7 литер. Все строчные буквы в новой строке заменить на заглавные. Найти первое цифровое слово и найти сумму его цифр.


    Помогите доделать:sorry: сумму цифрового слова:facepalm: или если можно чуть чуть уменьшить:)

    Код (Text):
    Program Stroki;
    Uses CRT;
    Const
    Mn_b:Set of char = ['a'..'z'];
    Mn_b1:Set of char = ['A'..'Z'];
    Mn_cifr:Set of char = ['0'..'9'];
    Var
    Mas:array[1..20] of String;
    Stroka,Nov_stroka1,Nov_stroka2,Nov_Stroka3,Buf_Str:String;
    i,j,k,Dlina,Kol,Kol1:Byte;
    Flag1,Flag2:Boolean;
    Begin
    ClrScr;
    Write('Введите строку: ');
    Readln(Stroka);
    Writeln;
    j:=1;
    Kol:=1;
    i:=1;
    While i <= Length(Stroka) do
    Begin
    If Stroka[i] <> ' ' then
    Begin
    Mas[j]:=Mas[j]+Stroka[i]
    End
    Else
    If Stroka[i] = ' ' then
    Begin
    Inc(j);
    Inc(Kol)
    End;
    Inc(i)
    End;
    Nov_Stroka1:='';
    I:=1;
    While i <= Kol do
    Begin
    Buf_Str:=Mas[i];
    Dlina:=Length(Buf_str);
    If Dlina <= 7 then
    Begin
    Flag1:=True;
    For j:=1 to Dlina do
    If Not (Buf_Str[j] in Mn_b) or (Buf_str[j] in Mn_b1) then
    Begin
    Flag1:=False;
    Break
    End;
    If Flag1=true then
    Begin
    Nov_stroka1:=Nov_stroka1+' '+Buf_str;
    End;
    End;
    Inc(i);
    End;
    For k:=1 to Length(Nov_stroka1) do
    Begin
    Nov_stroka1[k]:=UpCase(Nov_stroka1[k]);
    End;
    Write('Новая строка: ',Nov_Stroka1);
    Writeln;
    Nov_stroka2:='';
    i:=1;
    Kol1:=0;
    While i <= Kol do
    Begin
    Buf_Str:=Mas[i];
    Flag2:=True;
    For j:=1 to Length(Buf_str) do
    Begin
    If Not (Buf_str[j] In Mn_cifr) then
    Begin
    Flag2:=False;
    Break
    End;
    End;
    If Flag2=True then
    Begin
    Inc(Kol1);
    Break
    End;
    Inc(I)
    End;
    Nov_stroka2:=Buf_Str;
    If Kol1 > 0 then
    Writeln('Первое цифровое слово: ',Nov_Stroka2,'  Сумма =',Nov_Stroka3)
    Else
    Writeln('В строке нет цифрового слова ');
    Readln
    End.
    Попробовал без массива, но видимо без массива никак:
    Код (Text):
    Program lab6_string;
    uses
    crt;
    const
    rzd=[' ',','];  {возможные разделители слов}
    cfr:Set of char = ['0'..'9'];
    var
    s,s1:string;
    i,k,j,l,u:byte;
    t,x:integer;
    f:boolean;
    sum:longint;
    code:word;
    word:array[1..127] of string;
    begin
    clrscr;
    write('Введите строку: ');
    readln(s);
    i:=1;
    while i<=length(s) do
    if not(s[i] in rzd) then{если не разделитель}
    begin
    k:=0;{начинаем считать буквы}
    j:=i;
    l:=i;
    x:=0;
    while not(s[j] in rzd) and (j<=length(s)) do {пока не разделитель и не конец строки}
    begin
    k:=k+1;{считаем буквы}
    j:=j+1;{передвигаемся на следующий символ}
    end;
    begin
    while not(s[l] in rzd) and (l<=length(s)) do begin {пока не дойдем до следующего пробела будем}
    if (s[l] in cfr) then begin {есть цифры}
    x:=x+s[l];
    L:=l+1;
    end     {конец + условия}
    else begin               {если нет смотрим следующий символ}
    L:=l+1;
    end;  {конец - условия}
    end;  {конец условия если 4символьное слово}



    end;
    i:=i+1
    end
    else i:=i+1;{если разделитель, пропускаем}
    writeln(s);
    readln;

    Сумма цифр во всей строке
    Код (Text):
    program primer_lab4;
    var
    s:string;
    i,k,u:byte;
    t:integer;
    f:boolean;
    sum:longint;
    code:word;
    word:array[1..127] of string;
    begin
    write('vvedite stroku');
    readln(s);
    {удалим лишние пробелы}
    while s[1]=' ' do delete (s,1,1){в начале};
    s:=s+' ';
    sum:=0;
    u:=0;
    repeat
    i:=pos(' ',s);
    if i>0 then delete(s,i,1);
    until i=0;
    repeat
    i:=pos(' ',s);
    if i>0 then
    begin inc(k);
    word[k]:= copy(s,1,i-1);
    delete (s,1,i);
    end;
    until s='';
    for i:=1 to k do
    begin
    val(word[i],t,code);
    if code=0 then begin sum:=sum+t;
    f:=true; end;
    end;
    if f then write('sum',sum)
    else write('cfr net');
    readln;
    end.
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7

    в Else можно не писать условие if Stroka = ' ' then , ибо если условие If Stroka <> ' ' не выполняется, то Stroka = ' '

    Был прикольный пример перевода цифр с учетом того, что они идут подряд в таблице символов:
    Ord(Nov_stroka2[j])-Ord('0')
     
Загрузка...

Поделиться этой страницей