Помогите пожалуйста! Нужно написать прогу, с метками получается, но НУЖНО БЕЗ меток. Задание: Даны действительные числа a, b, c, d. Если a ≤ b ≤ c ≤ d, то каждое число заменить наибольшим из них; если a > b > c > d, то числа оставить без изменения; в противном случае все числа заменяются их квадратами. Написал без меток, но при этом выдет два ответа. Как сделать без меток? P.S. только не сильно заумным языком, не давно начал паскаль изучать.
Добрый день, MadMan! Смотри в Приложению несколько видоизмененая твоя прога!Здесь все как тебе нужно! Нет никаких меток!
Приложение: Ответ отправлен: 11.12.2002, 12:01 Отправитель: Tancho Отвечает X-RayMan
Доброго времени суток, MadMan! Смотри приложение. Зачем проверять все три условия? Тем более, что при одном из них числа не меняются. Надо проверять только те при которых эти самые числа меняютя. Т.е. условие a≤b≤c≤d, и если НЕ выполняется условие a>b>c>d.
Приложение: Ответ отправлен: 08.12.2002, 23:26 Отправитель: X-RayMan Отвечает Pinman
Добрый день, MadMan! См. приложение.
Приложение: Ответ отправлен: 08.12.2002, 21:55 Отправитель: Pinman Отвечает Ace
Приветствую Вас, MadMan! А что такое ? Если <=, то твоя задача решается следующим образом (см. приложение).
Приложение: Ответ отправлен: 09.12.2002, 19:17 Отправитель: Ace Отвечает Necro
Добрый день, MadMan! Убери goto exit;и поставь после следующего за ним енда else вместо точки с запятой. Ответ отправлен: 08.12.2002, 14:11 Отправитель: Necro Отвечает Sensey
Доброе время суток, MadMan! Держи, с минимальными исправлениями
Приложение: Ответ отправлен: 08.12.2002, 14:13 Отправитель: Sensey Отвечает Vadim
Доброе время суток, MadMan! У тебя все правильно! Судя по заданию у тебя и должен два раза выводится результат :)). См. приложение, программа bol. А вот если задание сформулировать немного по другому, например так: Задание: Даны действительные числа a, b, c, d. Если a <= b <= c <= d, то каждое число заменить наибольшим из них; ИНАЧЕ, если a > b > c > d, то числа оставить без изменения; в противном случае все числа заменяются их квадратами. См. приложение, программа bol1. Т.е. все дело в том, КАК СФОРМУЛИРОВАНО ЗАДАНИЕ. Без метки ты правильно выполнил задание, с меткой - НЕ ПРАВИЛЬНО. В твоем задании, по-логике, у тебя две отдельные проверки данных, в том задании, которое сформулировал я, проверка КАСКАДНАЯ, т.е. ЕСЛИ не выполняется первое условие, ТО проверяется второе услоие. В результате получается ответ в едиственном числе. Теперь
посмотрим формулировку задания у тебя. ЕСЛИ выполняется первое условие, ТО печатаем результат первый раз. Вне зависимости от проверки первого условия проверяем второе и ЕСЛИ оно выполняется (или не выполняеися, а оно обязательно не выполняется, если выполняется первое условие) печатаем результат второй раз. Вот такие пироги с котятами :)).
Приложение: Ответ отправлен: 09.12.2002, 08:20 Отправитель: Vadim Отвечает vitya
Доброе время суток, MadMan! Просто поставь перед вторым if (a <= b) and (b <= c) and (c <= d) then begin ... end else if (a > b) and (b > c) and (c > d) then begin ... end else begin ... end; Ответ отправлен: 09.12.2002, 11:09 Отправитель: vitya
Вопрос № 114
Доброго времени суток, уважаемые эксперты. Скажите мне, как эксперты - эксперту :). Как организовать неопределенный список параметров? Например как в write - сколько введу, столько и будет.
Доброе время суток, X-RayMan! procedure MyWrite(var val:array of byte); var i:byte; begin for i:=0 to High(val) do Write(val[i]); end; Учти, при этом индексация ВСЕГДА начинается с 0, а максимальный номер берем с помощью High. Ответ отправлен: 09.12.2002, 22:01 Отправитель: Pinman Отвечает Vadim
Добрый день, X-RayMan! Боюсь, что просто так - никак. Дело в том, что Write - это не функция, это макрос (где-то в факах по паскалю об этом прочитал :). Неопределеный список параметров (кстати, что ты имел в виду - их количество или типы?) можно реализовать посылая в качестве параметра коллекцию объектов, типа: Function MyFunc(C: PCollection): TypeOfResult; Как ты вероятно знаешь, в коллекцию можно помещать указатели на что угодно, не только на объекты. Это по сути своей динамический массив указателей. Как частный случай можно использовать массив неопределенной длины: Function MyFunc(C: array of string): TypeOfResult; или допустим Function MyFunc(C: array of integer): TypeOfResult; а дальше уже проводишь обработку элементов массива от 0 до High(C). С массивами получается проще, но они должны быть всегда одного типа, а с коллекциями - универсальнее,
объекты в них могут быть многотипны.
Ответ отправлен: 09.12.2002, 05:33 Отправитель: Vadim Отвечает Necro
Добрый день, X-RayMan! Я где-то читал, что write - это, в принципе, макрос, и поэтому ответ на твой вопрос - никак ^_^ Но есть выход - сделай параметром массив и число n - и первые n элементов массива считай параметрами. Ответ отправлен: 09.12.2002, 07:52 Отправитель: Necro Отвечает Sensey
Добрый день, X-RayMan! В Паскале через левое плечо правой ногой :) Можно передавать только массив например procedure p(a:array of pointer); begin end; В этом случае ты сам должен контролировать кол-во параметров, например передавать первым... И приводить к типу тоже вручную... Или передавать однотипные параметры... В С++ это реализовано вроде, но по другому...
Ответ отправлен: 09.12.2002, 11:44 Отправитель: Sensey
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.