Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2010, 10:27   #1
neomax38
Пользователь
 
Регистрация: 17.09.2010
Сообщений: 72
По умолчанию Строки в паскале

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

Помогите доделать


Код:
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.
Попробовал без массива, но видимо без массива никак:
Код:
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;
И не работающий код написанный Stilet
Код:
type
 worda=record s:string;ok:boolean;end;
var s:string; a:array[1..100] of worda;
  e,i,count,k,sum:integer; isdig:boolean;
begin   {$o-}
 s:='Helloololo 13 my 21 world';
 count:=1;
 isdig:=true;     sum:=0;
 i:=1; while (i<=length(s)) do begin
   if s[i]=' ' then begin
    val(a[count].s,k,e);
    if isdig and (e=0) then begin
      for k:=1 to length(a[count].s) do begin
        sum:=sum+ord(a[count].s[k])-ord('0');
      end;
      isdig:=false;
    end;
    inc(count);inc(i);
   end;
   a[count].s:=a[count].s+UpperCase(s[i]);
   a[count].ok:=length(a[count].s)<=7;
   inc(i);
 end;
 for k:=1 to count do begin
  if a[k].ok then  writeln(a[k].s);
 end;
 writeln(sum);
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.


Сумма цифр во всей строке
Код:
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.
neomax38 вне форума Ответить с цитированием
Старый 12.12.2010, 12:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
И не работающий код
А то что он не для твоей задачи предназначен ты во внимание конечно не принимаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
строки в паскале swedalena Помощь студентам 2 23.05.2010 17:39
строки в паскале ronny137 Помощь студентам 2 04.02.2010 08:36
Строки в паскале A.S.W Помощь студентам 2 07.01.2010 17:19
Строки В ПАСКАЛЕ hohol90 Помощь студентам 2 03.12.2009 16:31
строки в паскале Sarumjan Помощь студентам 3 03.12.2008 16:32