Помогите очень надо, а я в программировании не силен, заранее спосибо
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=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;
настя
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 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.
Я бы сказала что оно вообще как-то не так работает, а как надо я не знаю. Помогите пожалуйста!
настя
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; 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.
настя
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
я, несмотря на многочисленные старания, ваше предыдущее решение не понимаю. Если это возможно скажите что у меня не так, ведь без процедуры же все работает. Заранее благодарна.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.