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

1. Дана последовательность, содержащая от 2 до 30 слов,
в каждом из которых от 2 до 10 латинских букв, между соседними словами - не менее
одного пробела, за последним словом - точка. Напечатать все слова, отличные от
последнего слова, предварительно преобразовав каждое из них по следующему правилу:
удалив из слова все предыдущие вхождения последней буквы.

2. Дана непустая последовательность слов, в каждом из которых от 1 до 6 латинских букв n, л
между соседними словами - запятая, за последним словом - точка. Напечатать те слова, у которых
одинаковые "соседи", т.е. совпадают предыдущее и следующее слова (определить процедуру readword(w)
которое вводит очередное слово и присваевает его 6-литерной строке w, а запятую или точку, присваевает некоторой глобальной переменной).

3. type строка=packed array(1..100) of char;
описать рекурсивную логическую функцию симм(s,i,j) проверяющую, является ли симметричной часть строки S, начинающаяся i-м и кончающаяся j-м ее элементами
Altair
1 и 2 решается,используя материал FAQ'a...
FAQ: Разбиение строки на слова.
hiv
3) Рекурсивная функция:
type Tstr=packed array(1..100) of char;
. . . . .
function simm(s:Tstr; i,j:integer):boolean;
begin
if (i=j)or((j-i)=1) then simm:=(s[i]=s[j]) {проверка на конец рекурсии}
else simm:=(s[i]=s[j]) and simm(s,i+1,j-1); {сама рекурсия - смотрим вглубь строки}
end;
настя
подскажите пожалста поподробней как эту задачку решать, а то у меня че то циклица wacko.gif
мисс_граффити
что именно у тебя "циклица"?
код - в студию
Гость
задача у меня выглядит так:
function simm(S:string; i,j:integer):boolean;
var
b: boolean;
begin
clrscr;
while i<=j do
begin
if S[i]=S[j] then
begin
inc(i);
dec(j);
b:=simm(S,i,j);
end
else
begin
simm:=false;
end;
simm:=true;
end;
var
i,j:integer;
s:string;
boo:boolean;
begin
S:='123321t';
i:=1;
j:=6;
boo:=simm(S,i,j);
if boo then
writeln('симметрично');
else
writeln('несимметрично');
readln;
end.

Я бы сказала что оно вообще как-то не так работает, а как надо я не знаю. Помогите пожалуйста!
настя
туда надо по идее еще одну переменную ввести а какую и куда я незнаю
volvo
Цитата
туда надо по идее еще одну переменную ввести
Не надо туда ничего вводить - оттуда еще убрать можно половину... Зачем тебе B, например? Да и вызываешь ты функцию так, что она у тебя заведомо всегда будет выдавать True, потому, что с первого по шестой символ-то строка как раз симметрична...

Попробуй:
uses crt;
function simm(S:string; i,j:integer):boolean;
var b: boolean;
begin
if i <= j then begin

if S[i]=S[j] then begin
inc(i);
dec(j);
simm:=simm(S,i,j);
end
else begin
simm:=false;
end;

end
end;

var
i,j:integer;
s:string;
boo:boolean;

begin
clrscr;
S:='123321t';
boo:=simm(S,1,length(s));
if boo then writeln('симметрично')
else writeln('несимметрично');
readln;
end.
настя
искренне восхищаюсь вашим мастерством! огромнейшее спасибо за помощь!
а еще с одной поможете? Програмка без процедуры работает отлично , но препод требует хлеба и зрелищ, а точнее процедуру. Начинаю переделывать - не работает! не посмотрите что не так? Задачка такая: Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N.
volvo
Уже делал:
Здесь
Гость
решала я ее так:
uses crt;
var mas:array[1..500,1..2] of integer;
n,k,s2,s1,j,i: integer;
procedure sum;
Var i,j,k:integer;
s1:integer;
begin
s1:=0;
inc(k);
for i:=1 to trunc(j/2) do
if (j mod i:=0) then s1:=s1+i;
mas[k][1]:=s1;
mas[k][2]:=j;
end;


Begin
begin
write('введите число');
readln(n);
k:=0;
for i:=2 to n do
sum;
end;
s2:=0;
for i:=1 to k do
for j:=1 to k do
if (i<>j) then
begin
if (mas[i][1]=mas[j][2]) and (mas[j][1]=mas[i][2]) then
begin
writeln(mas[i][2], ' ', mas[j][2]);
inc(s2);
end;
if (s2=24) then
begin
readkey;
clrscr;
s2:=0;
end;
end;
readln;
end.


volvo
А вот это я не буду смотреть, извини... Во-первых, я тебе привел ссылку на свое решение, зачем мне еще раз изобретать велосипед. А во-вторых, ЭТО со строками (кажется, это ЧУЖАЯ тема, с ЧУЖИМ вопросом, не так ли?) никак не связано...
настя
я, несмотря на многочисленные старания, ваше предыдущее решение не понимаю. Если это возможно скажите что у меня не так, ведь без процедуры же все работает. Заранее благодарна.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.