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

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

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

 
 Ответить  Открыть новую тему 
> Задачи на строки, Помогите пожалуйста
сообщение
Сообщение #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-м ее элементами
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

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


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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


Гость






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


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






туда надо по идее еще одну переменную ввести а какую и куда я незнаю
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






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


Гость






Уже делал:
Здесь
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.


 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






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


Гость






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

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

 





- Текстовая версия 20.04.2024 12:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name