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

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

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

 
 Ответить  Открыть новую тему 
> Наименьшее общее кратное из файла
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 17
Пол: Женский

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


Задача:

С клавиатуры вводится N целых чисел (из интервала [10; 100]).

Требуется

1. записать все введенные числа в файл

2. открыть файл и вывести на экран все записанные в него числа (в строку)

3. найти наименьшее общее кратное компонентов, в записи которых нет цифры k.

примечание: массивы в программе не использовать


PROGRAM PRP1;

FUNCTION NOD (x,y:INTEGER):INTEGER;
BEGIN
IF x<>0 THEN NOD:=NOD(y MOD x, x) ELSE NOD:=y;
END;

function NOK(x,y:INTEGER):INTEGER;
BEGIN
NOK:=(x DIV NOD(x,y))*y;
END;

VAR f: FILE OF INTEGER;
i,
x1, x2,
m,
k,
n
:INTEGER;


BEGIN
{----------------------------1-----------------------}
REPEAT
WRITE('Имя файла - ');
READLN(name);
ASSIGN(f, name);
{$I-}
REWRITE(f);
{$I+}
UNTIL IOResult=0;
WRITE('Начинаем ввод последовательности');
WRITELN(' (конец последовательности > 10 или < 100)');
WHILE (true) DO
BEGIN
WRITE('Значение = ');
READLN(n);
IF (n <=10) OR (n >=100) THEN BREAK;
WRITE(f,n);
END;
CLOSE(f);
{-----------------------------2------------------------}
WRITELN(' В файле были написаны числа ');
RESET(f);
WHILE NOT EOF(f) DO
BEGIN
READ(f,n);
WRITE(n, ' ');
END;
WRITELN;

{----------------------------3--------------------------}
WRITE('Введите цифру k - ');
READLN(k);
WRITE('Числа, не содержащие k - ');
SEEK(f, 0);
FOR i:=0 TO FileSize(f)-1 DO
BEGIN
READ(f,n);
x1:= n DIV 10;
x2:= n MOD 10;
IF (x1<>k) AND (x2<>k) THEN
BEGIN
WRITE(n, ' ');


END;
END;
WRITELN;
END.



Первые два пункта вообще никаких проблем, выделить числа не содержащие k тоже никакой проблемы, а вот найти наименьшее общее кратное без создания массива ???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
а вот найти наименьшее общее кратное без создания массива ???
А зачем тебе для нахождения НОК нескольких чисел понадобился массив? Вообще-то NOK(a, b, c) = NOK(NOK(a, b), c) ... Этого достаточно, чтобы посчитать кратное для любого количества чисел безо всяких массивов.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Я.
****

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

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


Можно так:

//...
CurrNOK:=1; //просто потому, что меньше 10
FOR i:=0 TO FileSize(f)-1 DO
BEGIN
READ(f,n);
x1:= n DIV 10;
x2:= n MOD 10;
IF (x1<>k) AND (x2<>k) THEN
BEGIN
write(n,' ');
if CurrNOK<10 then
CurrNOK:=n
else
CurrNOK:=NOK(CurrNOK,n);
END;
END;
close(f); //Это не забыл? smile.gif
WRITE('NOK = ', CurrNOK);
readln;
END.

все работает чики-пики.

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


Цитата(sheka @ 11.09.2010 22:46) *
CurrNOK:=1; //просто потому, что меньше 10
Sheka, что ты имел в виду под этим комментом? при чем тут <10?


Добавлено через 3 мин.

Цитата
все работает чики-пики.
Держи ложку дегтя smile.gif.

числа: 2, 3
цифра k=0

твой ответ, если не ошибаюсь, будет равен NOK=1?

Добавлено через 2 мин.
нет, дела еще хуже.. ((

числа: 1,2,3,4,5,6,7,8,9
k: 1

NOK=9 ???

Зачем вообще проверка на <10 ?


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


Я.
****

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

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


yes2.gif Ага.
Цитата
С клавиатуры вводится N целых чисел (из интервала [10; 100]).
+ из кода
Цитата
IF (n <=10) OR (n >=100) THEN BREAK;
т.е. я здесь чтобы не вводить лишнюю логическую переменную использовал ограничения условия задачи. Единственное что может быть, так это то, что автор не предусмотрел того случая, если ни одно из введеных чисел не удовлетворяет ВСЕМ условиям. Хотя.. Как раз эту проверку надо вставлять в том куске кода, который написал я smile.gif. Ну я думаю ТС это сделает, да?

Добавлено через 2 мин.
я бы инициализировал CurrNOK как "Восемь с половиной миллионов" - любимое число моего преподавателя математики, но, к сожалению, integer..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


Да, все верно, зря я воду намутил )). Невнимательно читал условие, сорри.
Извиняюсь.


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


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

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

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


sheka +1
от dog и просто ответа (не говоря про "спасибо") фиг дождешься.
Живые собаки гораздо багодарнее...


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

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

 





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