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

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

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

 
 Ответить  Открыть новую тему 
> слова с метограммой составить цепочку пошаговым методом, понел но не совсем что делать
сообщение
Сообщение #1


Знаток
****

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

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


5 задание.
Словом метаграмма называется слово, полученное изменить одну букву в слове. Из несколько слов можно сделать цепочку метаграмм, соединяющею два слова. Самая маленькая цепочка есть слово и его метаграмма.

напишите программа которая определила два слова можно соединить метаграмной цепочкой.

Первичные данные написаны в файле duom.txt . На первой строчке написан натуральное число n
(2 ≤ n ≤ 20), на остальных n строчках по одному на писаному слову. Слово не больше 100 символов больших литовских букв.

Результат записывается в файл rez.txt. Если два первичные файловых слова можно соединить цепочкой, то в единственный результат записывает слово MOZNO. В другом случае записываем NEMOZNO.

первичные данные и результат
первичные данные
4
RYTAS
BATAS
RATAS
BADAS
Результат
MOZNO
Объяснение
RYTAS - RATAS - BATAS

ДОПОЛНИТЕЛЬНО НАПИСАТЬ ГЕНЕРАТОР СЛОВ
всего 20 слов
вопрос в словах должна быть такая же самая длина слова чтобы было соединено например
BATAS
RATA
?
а тут обязательно два первых слова соединить?
я так думаю что сперва как-то так надо
все слова в массив потом сравниваем слово. слово сравниваем по буквам и если в слове не совпадает одна буква то совпадает и это как-то true и все если нет то берем первое и третье слово и смотрим совпадает или нет и так далее.
и как написать методом обратным методом (пошаговым методом)?





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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(maksimla @ 15.03.2009 10:10) *
вопрос в словах должна быть такая же самая длина слова чтобы было соединено например
BATAS
RATA
?
а тут обязательно два первых слова соединить?
я так думаю что сперва как-то так надо
все слова в массив потом сравниваем слово. слово сравниваем по буквам и если в слове не совпадает одна буква то совпадает и это как-то true и все если нет то берем первое и третье слово и смотрим совпадает или нет и так далее.
и как написать методом обратным методом (пошаговым методом)?
Судя по условию, допускается только замена букв, но не добавление/удаление. То есть все слова должны быть равной длины.

В принципе, ты все правильно думаешь. А написать можно прмерно так (с рекурсией):
const
m=20;

var
i,n,l: word;
w: array[1..m]of string;
Used: array[1..m]of boolean;
f: text;

function Connected(a,b: word): boolean;
var
i,j: integer;
r,ua,ub: boolean;
begin
ua:=Used[a];
Used[a]:=true;
ub:=Used[b];
Used[b]:=true;
j:=0;
for i:=1 to l do if w[a][i]<>w[b][i] then Inc(j);
if j=1 then Connected:=true else begin
i:=3;
r:=false;
repeat
if not Used[i] then r:=Connected(a,i) and Connected(i,b);
Inc(i)
until r or (i>n);
Connected:=r
end;
Used[a]:=ua;
Used[b]:=ub
end;

begin
Assign(f,'duom.txt');
ReSet(f);
ReadLn(f,n);
for i:=1 to n do ReadLn(f,w[i]);
Close(f);
l:=Length(w[1]);
for i:=3 to n do Used[i]:=false;
WriteLn(Connected(1,2))
end.

Нужный вывод в файл сделай сам. Что неясно - спрашивай smile.gif.

Добавлено через 11 мин.
Цитата(maksimla @ 15.03.2009 10:10) *
ДОПОЛНИТЕЛЬНО НАПИСАТЬ ГЕНЕРАТОР СЛОВ
всего 20 слов
Генератор слов сделать легко, но только если брать все латинские (извини, литовских не знаю) буквы полностью случайно, то, боюсь, на двадцати словах результат будет NEMOZNO с подавляющей вероятностью. Так что, если хочется иногда получать MOZNO, то нужно генерить не просто так.. smile.gif

PS
лучше сказать NEVOZMOZNO, слова "неможно" в русском нет smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Знаток
****

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

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


кажется тут более менее все понятно только это непонятно или я забыл что оно значит или делает
l:=Length(w[1]);



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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(maksimla @ 18.03.2009 11:36) *
кажется тут более менее все понятно только это непонятно или я забыл что оно значит или делает
l:=Length(w[1]);
Это как раз самое простое. Функция Length возвращает длину строки. Поскольку (как я уже говорил) все слова должны быть одинаковой длины, то достаточно узнать длину одного из них и сохранить, чтобы потом использовать.

Значит, с рекурсией все ясно?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

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

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


да спасибо все понятно


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


Знаток
****

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

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


а я не ожидал что с генератором не справлюсь вот сделал простой генератор но чего то ошибка есть можете исправить пожалуйста
const
a=['A','À','B','C','È','D','E','Æ','Ë','F','G','H','I','Á','Y','J','K','L','M','N','O','P','R','S','Ð','T','U','Ø','Û','V','Z','Þ'];
var
n,i,x: integer;
t:text;
c:char;
begin
assign (t, 'duom.TXT');
rewrite (t);
randomize;
n:= random(100)+1;
x:= random(20)+1;
writeln(t,x);
for i:=1 to x do
begin
for i:=1 to n do
begin
c:= random(a);
write(t,c);
end;
writeln;
end
close(t);
end.



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


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(maksimla @ 20.03.2009 12:28) *
но чего то ошибка есть
Ты все же говори, какая именно ошибка. У тебя там много ошибок, я не знаю, на какой ты застрял.

1. Мой совет: сначала сделай программу для латинских букв и отладь, а потом переходи на литовские, если нужно.

2. Почему ты используешь один параметр (i) для двух вложенных циклов? Это грубейшая ошибка.

3. Почему ты делаешь переменное количество букв в слове?? Я же говорил уже.. Да еще до ста букв! Что, бывают такие слова в литовском? blink.gif

4. Зачем тебе множество a? Сделай массив букв, примерно вот так:
const
a: array [1..NLetters] of char=
('A','А','B','C','И','D','E','Ж','Л','F','G','H','I','Б','Y','J','K','L','M','N','O','P','R','S','Р','T','U','Ш','Ы','V','Z','Ю');

5. Почему у тебя множество стоит в параметре random? Сделай примерно так:
  c:=a[random(NLetters)+1];

Еще раз: если спрашиваешь про ошибку - говори, пожалуйста, про какую..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Знаток
****

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

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


Цитата(Lapp @ 20.03.2009 12:55) *

Ты все же говори, какая именно ошибка. У тебя там много ошибок, я не знаю, на какой ты застрял.

1. Мой совет: сначала сделай программу для латинских букв и отладь, а потом переходи на литовские, если нужно.

2. Почему ты используешь один параметр (i) для двух вложенных циклов? Это грубейшая ошибка.

3. Почему ты делаешь переменное количество букв в слове?? Я же говорил уже.. Да еще до ста букв! Что, бывают такие слова в литовском? blink.gif

4. Зачем тебе множество a? Сделай массив букв, примерно вот так:
const
a: array [1..NLetters] of char=
('A','А','B','C','И','D','E','Ж','Л','F','G','H','I','Б','Y','J','K','L','M','N','O','P','R','S','Р','T','U','Ш','Ы','V','Z','Ю');

5. Почему у тебя множество стоит в параметре random? Сделай примерно так:
  c:=a[random(NLetters)+1];

Еще раз: если спрашиваешь про ошибку - говори, пожалуйста, про какую..

1. а какая разница сперва латинские или литовские буквы
2. забыл наверное
3 одинаковое количиство букв в слове делаю. Самое большое слово кажется 40 букв в слове есть. Я исхожу из задачи что "Слово считается недлинее чем 100 символов" исходя из программы поэтому написал так .
4. незнаю смотрел что то все. а как вы сделали я хотел тоже както так то об этом забыл и не нашел в книжке .
5 а я сам не заметил что я много ошибок сделал да притом же и глупых ошибок не знаю что со мной случилось .

Вот написал как вы сказали но вы сейчас смеяться будете в файл не хочет выводить по словам все в одну строчку пишет
const
NLetters=32;
a: array [1..NLetters] of char=
('A','À','B','C','È','D','E','Æ','Ë','F','G','H','I','Á','Y','J','K','L','M','N','O','P','R','S','Ð','T','U','Ø','Û','V','Z','Þ');
var
n,i,x,j: integer;
t:text;
c:char;
begin
assign (t, 'duom.TXT');
rewrite (t);
randomize;
n:= random(100)+1;
x:= random(20)+1;
writeln(t,x);
for i:=1 to x do
begin
for j:=1 to n do
begin
c:= a[random(NLetters)+1];
write(t,c);
end;
writeln;
end;
close(t);
end.



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


Гость






Цитата
в файл не хочет выводить по словам все в одну строчку пишет
Правильно делает... Ты ж Writeln делаешь не в файл, а надо бы в файл: Writeln(t)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Знаток
****

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

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


да уж спасибо сам даже засмеялся я что не увидел такого lol.gif
всем спасибо можно тему закрывать

Сообщение отредактировано: maksimla -


--------------------
Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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