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

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

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

Автор: Точьичка 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:

Будем пробовать! wacko.gif

Автор: 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);

end;
end;

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

readln;
end.



в следующий раз используй поиск: http://forum.pascal.net.ru/index.php?showtopic=6972