Помогите очень надо, а я в программировании не силен, заранее спосибо
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-м ее элементами
type Tstr=packedarray(1..100) of char;
. . . . .
function simm(s:Tstr; i,j:integer):boolean;
beginif (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;
настя
30.10.2006 23:44
подскажите пожалста поподробней как эту задачку решать, а то у меня че то циклица
мисс_граффити
31.10.2006 0:07
что именно у тебя "циклица"? код - в студию
Гость
31.10.2006 0:24
задача у меня выглядит так:
function simm(S:string; i,j:integer):boolean;
var
b: boolean;
begin
clrscr;
while i<=j dobeginif S[i]=S[j] thenbegin
inc(i);
dec(j);
b:=simm(S,i,j);
endelsebegin
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.
Я бы сказала что оно вообще как-то не так работает, а как надо я не знаю. Помогите пожалуйста!
настя
31.10.2006 0:29
туда надо по идее еще одну переменную ввести а какую и куда я незнаю
volvo
31.10.2006 0:45
Цитата
туда надо по идее еще одну переменную ввести
Не надо туда ничего вводить - оттуда еще убрать можно половину... Зачем тебе B, например? Да и вызываешь ты функцию так, что она у тебя заведомо всегда будет выдавать True, потому, что с первого по шестой символ-то строка как раз симметрична...
Попробуй:
uses crt;
function simm(S:string; i,j:integer):boolean;
var b: boolean;
beginif i <= j thenbeginif S[i]=S[j] thenbegin
inc(i);
dec(j);
simm:=simm(S,i,j);
endelsebegin
simm:=false;
end;
endend;
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.
настя
31.10.2006 1:00
искренне восхищаюсь вашим мастерством! огромнейшее спасибо за помощь! а еще с одной поможете? Програмка без процедуры работает отлично , но препод требует хлеба и зрелищ, а точнее процедуру. Начинаю переделывать - не работает! не посмотрите что не так? Задачка такая: Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N.
решала я ее так: 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
31.10.2006 1:20
А вот это я не буду смотреть, извини... Во-первых, я тебе привел ссылку на свое решение, зачем мне еще раз изобретать велосипед. А во-вторых, ЭТО со строками (кажется, это ЧУЖАЯ тема, с ЧУЖИМ вопросом, не так ли?) никак не связано...
настя
31.10.2006 1:21
я, несмотря на многочисленные старания, ваше предыдущее решение не понимаю. Если это возможно скажите что у меня не так, ведь без процедуры же все работает. Заранее благодарна.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.