![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
dog |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 17 Пол: Женский Репутация: ![]() ![]() ![]() |
Задача:
С клавиатуры вводится 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 тоже никакой проблемы, а вот найти наименьшее общее кратное без создания массива ??? |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата а вот найти наименьшее общее кратное без создания массива ??? А зачем тебе для нахождения НОК нескольких чисел понадобился массив? Вообще-то NOK(a, b, c) = NOK(NOK(a, b), c) ... Этого достаточно, чтобы посчитать кратное для любого количества чисел безо всяких массивов. |
sheka |
![]()
Сообщение
#3
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Можно так:
//...
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); //Это не забыл?
WRITE('NOK = ', CurrNOK);
readln;
END.
все работает чики-пики. Сообщение отредактировано: sheka - 11.09.2010 21:48 |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
CurrNOK:=1; //просто потому, что меньше 10 Sheka, что ты имел в виду под этим комментом? при чем тут <10?Добавлено через 3 мин. Цитата все работает чики-пики. Держи ложку дегтя ![]() числа: 2, 3 цифра k=0 твой ответ, если не ошибаюсь, будет равен NOK=1? Добавлено через 2 мин. нет, дела еще хуже.. (( числа: 1,2,3,4,5,6,7,8,9 k: 1 NOK=9 ??? Зачем вообще проверка на <10 ? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
sheka |
![]()
Сообщение
#5
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
![]() Цитата С клавиатуры вводится N целых чисел (из интервала [10; 100]). + из кода Цитата IF (n <=10) OR (n >=100) THEN BREAK; т.е. я здесь чтобы не вводить лишнюю логическую переменную использовал ограничения условия задачи. Единственное что может быть, так это то, что автор не предусмотрел того случая, если ни одно из введеных чисел не удовлетворяет ВСЕМ условиям. Хотя.. Как раз эту проверку надо вставлять в том куске кода, который написал я ![]() Добавлено через 2 мин. я бы инициализировал CurrNOK как "Восемь с половиной миллионов" - любимое число моего преподавателя математики, но, к сожалению, integer.. |
Lapp |
![]()
Сообщение
#6
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Да, все верно, зря я воду намутил )). Невнимательно читал условие, сорри.
Извиняюсь. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
sheka +1
от dog и просто ответа (не говоря про "спасибо") фиг дождешься. Живые собаки гораздо багодарнее... -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 30.07.2025 22:18 |