Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с задачей
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Точьичка
Вот текст задачи:

Дана строка символов. Определить количество слов, начиная с буквы "а", вывести на печать самое длинное слово, начинающееся с буквы "а"

помогите пожалуйста
compiler
Цитата(Точьичка @ 25.11.2007 19:43) *
Вот текст задачи:
Дана строка символов. Определить количество слов, начиная с буквы "а", вывести на печать самое длинное слово, начинающееся с буквы "а"
помогите пожалуйста


проходишь циклом по тексту, если после пробела стоит "а", то это слово начинается на "а", считаешь количество букв в нем(от "а" до знака припенания пробела) и если это количество больше самого большого то запоминаешь это слово и количиство его букв в самое большое...

тоесть у тебя есть строка ввода, проходя по которой ты сравниваешь текущее слово с самым большим на данный момент(не забудь его инициализировать) и запоминаешь текущее туда если условие удалетворяется, а потом идеш дальше и так до конца строки...



где возникают вопросы? что не получается?

-Илья-
Цитата(Точьичка @ 25.11.2007 20:43) *

Вот текст задачи:

Дана строка символов. Определить количество слов, начиная с буквы "а", вывести на печать самое длинное слово, начинающееся с буквы "а"

помогите пожалуйста

uses SysUtils;
var
s, substr: array [0..200] of char;
len, maxLen, N: integer;
p, p0: PChar;
begin
writeln('Enter string');
readln(s);
p:=s;
maxLen:=0; N:=0;
while p <> StrEnd(s) do begin
while p^ = ' ' do inc(p);
if p^ <> 'a' then begin
p := StrScan(p, ' ');
if p = nil then break;
end else begin
len:=0;
inc(N);
p0:=p;
repeat
inc(len); inc(p);
until (p = StrEnd(s)) or (p^ = ' ');
if len > maxLen then begin
maxLen:=len;
StrMove(substr, p0, p-p0);
end;
end;
end;
writeln('max len = ', maxLen, '; N = ', N);
writeln('max string: ', substr);
end.
Точьичка
вот после слова BEGIN вообще ничего не получалось. Огроооомное спасибо!

Добавлено через 6 мин.
2 Илья:

Файл SysUtils не найден, к сожалению

2 compiler:

Будем пробовать! wacko.gif
Sozialist
Илья, Дельфи, конечно, круче) Никто не спорит.
Точьичка
Выложу завтра адаптированную версию.
Точьичка
пытылысь так:


Program Lab;
uses crt;
var s:array[1..200] of char;
i,q:integer;

BEGIN
clrscr;
readln(s);
q:=0;
For i:=1 to s do

IF s[i]=#32 AND s[i+1]=#97 THEN
q:=q+1;

writeln(q);
readkey;
end.



он останавливает курсор на строке readln(s) и пишет что Cannot Read or Write variables of this type

тогда попробовала так:

Program Lab;
uses crt;
var s:string;
i,q:integer;

BEGIN
clrscr;
readln(s);
q:=0;
For i:=1 to length(s) do

IF s[i]=#32 AND s[i+1]=#97 THEN
q:=q+1;

writeln(q);
readkey;
end.



Теперь он останавливает курсор на строке s[i+1]=#97 и пишет ошибку 41:Operand types do not match operator
Точьичка
получилось составить зодачу, которая считает слова, начинающиеся на а
clrscr;
readln(s);
w:=' ';
Insert(w,s,1);
q:=0;
For i:=1 to length(s) do
IF s[i]=#32 THEN
For i:=1 to length(s) do
IF s[i+1]=#97 then
q:=q+1;
writeln(q);
readkey;
end.



а вот подсчет количества "а" в слове не идет никак
wilin
А в чем проблема? В начале цикла присвой максу ноль, в цикле сделай сравнение с q. Если он больше макс, то заменяй
klem4
Точьичка все просто:
uses crt;

const
letters = [' ', '.', ',']; { символы, которые могут разделять слова }

var
s, s_max: String;
i, start, count: Byte;

begin
clrscr;

write('s = '); readln(s);

count := 0;

s_max := '';

i := 1;

while i <= length(s) do begin

while (i <= length(s)) and (s[i] in letters) do
inc(i);

if i <= length(s) then begin

start := i;

if s[i] = 'a' then
inc(count);

while (i <= length(s)) and not (s[i] in letters) do
inc(i);


if (s[start] = 'a') and (i - start > Length(s_max)) then
s_max := Copy(s, start, i - start);

end;
end;

writeln('count = ', count);
writeln('s_max = "', s_max, '"');

readln;
end.



в следующий раз используй поиск: Разбиение на слова. Все способы.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.