строки в процедуре

Ответить
Ganja
Сообщения: 4
Зарегистрирован: 10 дек 2009, 18:58

сделайте пожалуйста мне 2 процедуры:
1)Найти какое-нибудь слово, начинающееся с буквы "а"
2)Найти длину самого короткого слова
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Уточните в чем искать в файле, в массиве...
Если на вход массив, то можно сделать что-то подобное:
[syntax="pascal"]
const n=50;
type mas=array[1..n] of string;

function Slovo(var arr:mas):string;
var i:integer;
begin
for i:=1 to n do
if upcase(arr[1])='A' then
begin
Slovo:=arr;
break;
exit;
end;
Slovo:='BAD';
end;

function LengthMin(var arr:mas):integer;
var i,tmp:integer;
min:string;
begin
min:=arr[1];
tmp:=length(min);
for i:=2 to n do
if length(arr)<=tmp then
begin
min:=arr;
tmp:=length(min);
end;
LengthMin:=tmp;
end;
[/syntax]
Нет религии выше истины
Ganja
Сообщения: 4
Зарегистрирован: 10 дек 2009, 18:58

нет, текст задается в ручную!!
вот тут лежит почти вся программа (не знаю верна она или нет):
http://forum.developing.ru/showthread.p ... #post76233
и мне там не хватает двух процедур!! так что по мойму эти дву функции не подайдут=( и еще, нельзяли все же это сделать в процедуре?
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Посмотрел Ваш код по ссылке: никакой последовательности там не описанно, т.е. мы вводим по одному слову, и с каждым новым словом предидущее теряется. Чтобы обрабатывать данные их нужно хранить в какой-нибудь структуре.
Переделать функции в процедуры не составит: труда можно передать результат через var-параметр, через глобальную переменную или вывести в теле процедуры.
Нет религии выше истины
Ganja
Сообщения: 4
Зарегистрирован: 10 дек 2009, 18:58

хмммм....
вот задание:
Дан текст. Группы символов, разделенные пробелами и не содержащие пробелы внутри себя, будем называть словами.
так что нам не надо вводить все время новые слова, мы вводим одну строчку с пробелами и она сохраняется в s:string! и сама программа вроде норм рабовает (все задания выполняет вроде норм) просто я боюсь что там я надедал каких нибуть ошибок, так как я не блещу знаниями паскаля!
P.S. и все же, если вас не затруднит, можете написать эти 2 задания:
1)Найти какое-нибудь слово, начинающееся с буквы "а"
2)Найти длину самого короткого слова
с помошью ПРОЦЕДУРЫ + учитывая то что силволы вводятся в ручную, а через массив или файл!
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

Поработайте над этим:
[syntax="pascal"]
procedure Slovo(a:string);
var i:integer;
st:string;
begin
st:='';
for i:=1 to Length(a) do
if (upcase(a)='A') and ((a[i-1]=' ') or (i=1)) then
begin
repeat
st:=st+a;
inc(i);
until (a=' ') or (i>length(a));
break;
end;
if length(a)>0 then writeln('Stroka naidena: ',st)
else writeln('Stroka NE naidena!');
end;

procedure LengthMin(a:string);
var i:integer;
tmp,min:string;
begin
tmp:=a;
i:=pos(' ',tmp);
min:=copy(tmp,1,i-1);
repeat
delete(tmp,1,i);
i:=pos(' ',tmp);
if i<=length(min) then
begin
if length(copy(tmp,1,i-1))>0
then min:=copy(tmp,1,i-1);
end;
until i=0;
if length(min)>=length(tmp) then
min:=tmp;
writeln('Dlina min: ',length(min));
end;
[/syntax]
Нет религии выше истины
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

1) Программа в одно действие. Какое-нибудь т.е. вообще лубое. Делайте через if pos(" a",s)>0 then ... // делайте, что вам надо.
2) Первый пробел - стартуете счетчик. Второй пробел - останавливаете счетчик и сверяете с максимумом, сбрасываете счетчик. Итог: самое длинное слово, если надо запоминаете еще и позицию.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Ответить