Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на строки

Автор: Олег. 5.06.2007 0:17

Ребят,помогите кому не сложно, в следующей задаче. Щас делаю потихонбку- как что напишу буду выкладывать. Прошу помощи т.к. со строками никогда не работал.
Задание:
Дан массив символьных строк.Длина каждой строки не более 80ти символов. Строка состоит из слов, разделенных пробелами. В начале каждой строки пробел отсутствует. Ввод строк осуществляется с клавиатуры до тех пор пока не будет введена пустая строка. Требуется:
1.Выделить из каждой строки и напечатать слова: не содержащие латинских букв
2.Среди слов найти: самое длинное
3.Преобразовать строку которой принадлежит найденное слово сред. образом: повторить все цифры.
Заранее благодарен всем за любую помощь.

Автор: Артемий 5.06.2007 1:01

http://forum.pascal.net.ru/index.php?showtopic=6972 + показывай что делал,поправим. + задачи похожие были.

Автор: Гость 5.06.2007 1:47

РЕБЯТА НАШЕЛ,НО ЧУТЬ ПОПРАВИТЬ НАДО:
Там немного совсем исправить+комменты есть.
Задание:
Дан массив символьных строк. Длина каждой строки не более 80 символов. Строка состоит из слов, разделенных пробелами. В начале каждой строки пробел отсутствует. Ввод строк осуществляется с клавиатуры до тех пор, пока не будет введена пустая строка. Требуется:
1. Выделить из каждой строки и напечатать слова:
1. Не содержащие русских букв.
2. Среди выделенных слов найти:
4. Содержащее максимальную цепочку из нулей.
3. Преобразовать строку, которой принадлежит наибольшее слово следующим образом:
3. Удалить все слова, содержащие цифры.

(Каждое задание выполняется в виде отдельной процедуры)

Внешняя спецификация.
Входные: массив строк А.
Выходные: слова, в соответствии с заданием.


Тестовые примеры.

Строки:
exam пример пр exa
examprimer 0g0g g090008 876d прих
Результат:
Несодрусбукв: exam
Несодрусбукв: exa
Несодрусбукв: examprimer
Несодрусбукв: 0g0g
Несодрусбукв: g090008
Несодрусбукв: 876d
Максцепнулей: g090008
Словабезцифр: examprimer прих

Листинг программы

program l3;
uses crt;{подключение библиотеки}
var{инициализация переменных}
str: array [0..25] of string[80];
w: array [0..25, 0..25] of string[80];
cntw: array [0..25] of integer;
wnr: array [0..10, 0..10] of string[20];
cntwnr: array [0..25] of integer;
m, i, j: integer;
s: string[80];


procedure FindWord(str: string; q: integer); {процедура, ищет в строке слова, записывает в массив}

var
n, i, j, k: integer;
t: byte;

begin
k:=0;
str:=str+' ';
n:=pos(' ',str);

while length(str)<>0 do
begin
if (str[1]<>' ') then
begin
w[q,k]:=copy(A,1,n-1);{копирование куска строки в массив}
delete(A,1,n-1);{удаление этого куска строки}
n:=pos(' ',A);{определение местоположение пробела}
k:=k+1;
end
else
begin
delete(A,1,1);{удаление пробела, если он стоит первым}
n:=pos(' ',str);
end;
end;
cntw[q]:=k; {счетчик слов}
end;


procedure NoRus; { процедура, ищет слова, не содержащие русских букв }
var
i, j, k, z: integer;
flag: boolean;

begin
cntwnr[i]:=0; {счетчик слов, не сод рус букв}
for i:=0 to m-1 do
begin
z:=0;
for j:=0 to cntw[i]-1 do{цикл по словам массива w}
begin
flag:=false;
for k:=1 to length(w[i,j])-1 do
if (w[i,j,k] in ['а'..'я']) or (w[i,j,k] in ['А'..'Я']) then
flag:=true;
if not flag then
begin
wnr[i,z] := w[i,j];{массив слов, не сод рус букв}
cntwnr[i] := cntwnr[i]+1;
writeln('несодрусбукв: ',wnr[i,z]); {печать массива wnr}
z:=z+1;
end;
end;
end;
end;


function WhatZ(s: string): integer; {функция, считает в слове цепочку нулей}
var
i, cnt, max: integer;
begin
cnt := 0; {счетчик нулей}
max := 0;
for i:=1 to length(s)-1 do
if (s[i] = '0') then
cnt:=cnt+1
else
begin
if cnt > max then
max := cnt;
cnt := 0;
end;

if cnt > max then {end of string}
max := cnt;

WhatZ := max;
end;


function FindStrMaxWord: integer; {поиск самого длинного слова в строке}
var
imax, x, i, j, max: integer;

begin
max:=0;
for i:=0 to m-1 do
for j:=0 to cntw[i]-1 do
begin
x := length(w[i,j]);
if x > max then
begin
max := x;
imax := i;
end
end;
FindStrMaxWord := imax;
end;


procedure Zeros; {среди слов, не сод рус букв ищет слово, сод макс цепочку из нулей}
var
i, j, k, imax, jmax, max, x: integer;

begin
max := 0;
imax := 0;
jmax := 0;
for i:=0 to m-1 do
for j:=0 to cntw[i]-1 do
begin
x := WhatZ(wnr[i,j]);
if x > max then
begin
max := x;
imax := i;
jmax := j;
end;
end;
if max <> 0 then {'0' exist}
writeln('максцепнулей: ',wnr[imax,jmax]);
end;


procedure DelDig; {процедура, удаляет числа в словах строки, сод самое длинное слово}
var
k, i, j: integer;
digexist: boolean;

begin
digexist:=false;

write('словабезцифр:');
i:=FindStrMaxWord;
for j:=0 to cntw[i] do
begin
digexist:=false;
for k:=1 to length(w[i,j]) do
if w[i,j,k] in ['0'..'9'] then
digexist:=true;

if not digexist then
write(' ',w[i,j]);
end;

end;


{ -----------
main
-------------}

begin
clrscr;
writeln('Дан массив символьных строк. Длина каждой строки не более 80 символов.');
writeln('Строка состоит из слов, разделенных пробелами. В начале каждой строки');
writeln('пробел отсутствует. Ввод строк осуществляется с клавиатуры до тех пор,');
writeln('пока не будет введена пустая строка. Требуется:');
writeln('1.Выделить из каждой строки и напечатать слова не содержащие русских букв.');
writeln('2.Среди выделенных слов найти содержащее максимальную цепочку из нулей.');
writeln('3.Преобразовать строку, которой принадлежит наибольшее слово следующим образом:');
writeln(' Удалить все слова, содержащие цифры.');
writeln('(Каждое задание выполняется в виде отдельной процедуры)');

m:=0;
repeat{ввод строк, пока не введена нулевая строка}
writeln('Введите строку');
readln(s);
if length(s)<>0 then
begin
str[m] := s; {запись строк в массив строк}
m := m+1;
end;
until length(s)=0;

for i:=0 to m-1 do
FindWord(str[i],i);{выполнение вышеописанных процедур}
NoRus;{------1-------}
Zeros;{--------2------}
DelDig;{-------3------}

readln; {ждем нажатия}

end.

Автор: Гость 5.06.2007 10:47

Народ, ну ктонить посмотрит?