IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задачи на строки, Помогите пожалуйста
Ali
сообщение 31.05.2005 6:51
Сообщение #1


Гость






Помогите очень надо, а я в программировании не силен, заранее спосибо

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-м ее элементами
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
Altair
сообщение 31.05.2005 7:15
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


1 и 2 решается,используя материал FAQ'a...
FAQ: Разбиение строки на слова.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 31.05.2005 9:01
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


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;


Сообщение отредактировано: volvo - 2.11.2006 0:23


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
настя
сообщение 30.10.2006 19:44
Сообщение #4


Гость






подскажите пожалста поподробней как эту задачку решать, а то у меня че то циклица wacko.gif
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 30.10.2006 20:07
Сообщение #5


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


что именно у тебя "циклица"?
код - в студию


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 30.10.2006 20:24
Сообщение #6


Гость






задача у меня выглядит так:
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 - 2.11.2006 0:23
 К началу страницы 
+ Ответить 
настя
сообщение 30.10.2006 20:29
Сообщение #7


Гость






туда надо по идее еще одну переменную ввести а какую и куда я незнаю
 К началу страницы 
+ Ответить 
volvo
сообщение 30.10.2006 20:45
Сообщение #8


Гость






Цитата
туда надо по идее еще одну переменную ввести
Не надо туда ничего вводить - оттуда еще убрать можно половину... Зачем тебе 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.
 К началу страницы 
+ Ответить 
настя
сообщение 30.10.2006 21:00
Сообщение #9


Гость






искренне восхищаюсь вашим мастерством! огромнейшее спасибо за помощь!
а еще с одной поможете? Програмка без процедуры работает отлично , но препод требует хлеба и зрелищ, а точнее процедуру. Начинаю переделывать - не работает! не посмотрите что не так? Задачка такая: Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N.
 К началу страницы 
+ Ответить 
volvo
сообщение 30.10.2006 21:06
Сообщение #10


Гость






Уже делал:
Здесь
 К началу страницы 
+ Ответить 
Гость
сообщение 30.10.2006 21:16
Сообщение #11


Гость






решала я ее так:
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
сообщение 30.10.2006 21:20
Сообщение #12


Гость






А вот это я не буду смотреть, извини... Во-первых, я тебе привел ссылку на свое решение, зачем мне еще раз изобретать велосипед. А во-вторых, ЭТО со строками (кажется, это ЧУЖАЯ тема, с ЧУЖИМ вопросом, не так ли?) никак не связано...
 К началу страницы 
+ Ответить 
настя
сообщение 30.10.2006 21:21
Сообщение #13


Гость






я, несмотря на многочисленные старания, ваше предыдущее решение не понимаю. Если это возможно скажите что у меня не так, ведь без процедуры же все работает. Заранее благодарна.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.06.2025 11:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"