Форум «Всё о Паскале» _ Задачи _ Помогите с задачей
Автор: Точьичка 26.11.2007 0:43
Вот текст задачи:
Дана строка символов. Определить количество слов, начиная с буквы "а", вывести на печать самое длинное слово, начинающееся с буквы "а"
помогите пожалуйста
Автор: compiler 26.11.2007 1:32
Цитата(Точьичка @ 25.11.2007 19:43)
Вот текст задачи: Дана строка символов. Определить количество слов, начиная с буквы "а", вывести на печать самое длинное слово, начинающееся с буквы "а" помогите пожалуйста
проходишь циклом по тексту, если после пробела стоит "а", то это слово начинается на "а", считаешь количество букв в нем(от "а" до знака припенания пробела) и если это количество больше самого большого то запоминаешь это слово и количиство его букв в самое большое...
тоесть у тебя есть строка ввода, проходя по которой ты сравниваешь текущее слово с самым большим на данный момент(не забудь его инициализировать) и запоминаешь текущее туда если условие удалетворяется, а потом идеш дальше и так до конца строки...
где возникают вопросы? что не получается?
Автор: -Илья- 26.11.2007 3:19
Цитата(Точьичка @ 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.
Автор: Точьичка 26.11.2007 7:26
вот после слова BEGIN вообще ничего не получалось. Огроооомное спасибо!
Добавлено через 6 мин. 2 Илья:
Файл SysUtils не найден, к сожалению
2 compiler:
Будем пробовать!
Автор: Sozialist 26.11.2007 7:40
Илья, Дельфи, конечно, круче) Никто не спорит. Точьичка Выложу завтра адаптированную версию.
Автор: Точьичка 26.11.2007 8:08
пытылысь так:
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
Автор: Точьичка 26.11.2007 8:50
получилось составить зодачу, которая считает слова, начинающиеся на а
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 26.11.2007 13:51
А в чем проблема? В начале цикла присвой максу ноль, в цикле сделай сравнение с q. Если он больше макс, то заменяй
Автор: klem4 26.11.2007 22:50
Точьичка все просто:
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);