• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Даны три вещественных числа...

димон4ик

Новые
Регистрация
2 Окт 2011
Сообщения
29
Реакции
0
Баллы
0
Даны три вещественных числа...

3. Даны три вещественных числа. Если из них можно составить возрастающую арифметическую прогрессию, то вывести эту прогрессию.
На Паскале.
 
Нужно завтро здать люди помогите плиз??

Даны три вещественных числа. Если из них можно составить возрастающую арифметическую прогрессию, то вывести эту прогрессию.
На Паскале.
 
посмотрите правильно ли я написал эту програму
var
number1, number2, number3: real;
min, sred, max: real;
begin
max:= number1;
if number2 > max then max:= number2;
if number3 > max then max:= number3;

min:= number1;
if number2 < min then min:= number2;
if number3 < min then min:= number3;

if (number1 > min) and (number1 < max) then sred:= number1;
if (number2 > min) and (number2 < max) then sred:= number2;
if (number3 > min) and (number3 < max) then sred:= number3;

if (max - min = sred) then
ShowMessage(FloatToStr(min) + ' ' + FloatToStr(sred) + ' ' + FloatToStr(max));
end;
 
посмотрите правильно ли я написал эту програму
Структурно - правильно, и даже остроумно. Но ошибок много:

1.
if (max - min = sred) then
- ошибка! Надо
if ((max + min)/2 = sred) then

2. Где ввод самих чисел? Они в компьютер с неба не свалятся.

3. В конце программы желательно вставить оператор readln без параметров - тогда, выведя на экран результат, программа остановится и позволит этот результат рассмотреть.

4. ГРУБЕЙШАЯ ошибка: после закрывающего программу END должно стоять ТОЧКА, а не точка с запятой!

5. И, наконец: что за вывод данных у Вас применен? Откуда Вы взяли операторы ShowMessage и FloatToStr? Они в состав основных команд Паскаля не входят и требуют подключения специального модуля, где они задаются. А главное - зачем? Чтобы три числа на экран вывести? Так это делается много-много проще.

С учетом всего вышесказанного, предлагаю рабочий код:
Код:
var
 number1, number2, number3: real;
 min, sred, max: real;
begin
 write('number1= ');
 readln(number1);

 write('number2= ');
 readln(number2);

 write('number3= ');
 readln(number3);

 max:= number1;
 if number2 > max then max:= number2;
 if number3 > max then max:= number3;

 min:= number1;
 if number2 < min then min:= number2;
 if number3 < min then min:= number3;

 if (number1 > min) and (number1 < max) then sred:= number1;
 if (number2 > min) and (number2 < max) then sred:= number2;
 if (number3 > min) and (number3 < max) then sred:= number3;

 if ((max + min)/2 = sred) then
  writeln('YES! ',min:0:3,'   ',sred:0:3,'   ',max:0:3)
 else
  writeln('NO!');
 readln;
end.
 
Структурно - правильно, и даже остроумно. Но ошибок много:

1.
- ошибка! Надо
if ((max + min)/2 = sred) then

2. Где ввод самих чисел? Они в компьютер с неба не свалятся.

3. В конце программы желательно вставить оператор readln без параметров - тогда, выведя на экран результат, программа остановится и позволит этот результат рассмотреть.

4. ГРУБЕЙШАЯ ошибка: после закрывающего программу END должно стоять ТОЧКА, а не точка с запятой!

5. И, наконец: что за вывод данных у Вас применен? Откуда Вы взяли операторы ShowMessage и FloatToStr? Они в состав основных команд Паскаля не входят и требуют подключения специального модуля, где они задаются. А главное - зачем? Чтобы три числа на экран вывести? Так это делается много-много проще.

С учетом всего вышесказанного, предлагаю рабочий код:
Код:
var
 number1, number2, number3: real;
 min, sred, max: real;
begin
 write('number1= ');
 readln(number1);

 write('number2= ');
 readln(number2);

 write('number3= ');
 readln(number3);

 max:= number1;
 if number2 > max then max:= number2;
 if number3 > max then max:= number3;

 min:= number1;
 if number2 < min then min:= number2;
 if number3 < min then min:= number3;

 if (number1 > min) and (number1 < max) then sred:= number1;
 if (number2 > min) and (number2 < max) then sred:= number2;
 if (number3 > min) and (number3 < max) then sred:= number3;

 if ((max + min)/2 = sred) then
  writeln('YES! ',min:0:3,'   ',sred:0:3,'   ',max:0:3)
 else
  writeln('NO!');
 readln;
end.

Вот эта строчка что то не правильно if ((max + min)/2 = sred) then
 
В каком смысле? Почему неправильно? Я считаю, что всё правильно. Поясните.

Почему надо делить на 2 если нам нужно найти разность чисел тоесть d чтобы узнать какая это прогрессия програма выдает ошибку
 
Последнее редактирование:
Почему надо делить на 2 если нам нужно найти разность чисел тоесть d чтобы узнать какая это прогрессия
Поясняю на примере. Пусть дано три числа: 2, 12, 7. Ясно, что они образуют арифметическую прогрессию с d=5. Программа работает так:
1. Находит минимальное (min) - в данном примере 2.
2. Находит максимальное (mах) - в данном примере 12.
3. Проверяет, совпадает ли среднее арифметическое между max и min (2+12)/2 с третьим числом (sred). Если да, то числа образуют прогрессию.
Можете проверить на любых своих примерах.
програма выдает ошибку
Так. Хоть и писал об этом неоднократно, но подчеркну еще раз - я НЕ позволяю себе выкладывать на форум сырые неотлаженные неоттестированные программы. Естественно, и эта была проверена путём трансляции и запуска на ряде примеров. Разумеется, никаких ошибок она не выдает, да и неоткуда им взяться. А если у Вас возникают ошибка, то будьте так любезны - выложите ПОДРОБНУЮ информацию - где именно? Что сообщает транслятор? Ну и т.п. - чем больше, тем лучше. Будем разбираться.
P.S. А слово "программа" пишется с двумя "м". Так, на будущее.
 
Поясняю на примере. Пусть дано три числа: 2, 12, 7. Ясно, что они образуют арифметическую прогрессию с d=5. Программа работает так:
1. Находит минимальное (min) - в данном примере 2.
2. Находит максимальное (mах) - в данном примере 12.
3. Проверяет, совпадает ли среднее арифметическое между max и min (2+12)/2 с третьим числом (sred). Если да, то числа образуют прогрессию.
Можете проверить на любых своих примерах.

Так. Хоть и писал об этом неоднократно, но подчеркну еще раз - я НЕ позволяю себе выкладывать на форум сырые неотлаженные неоттестированные программы. Естественно, и эта была проверена путём трансляции и запуска на ряде примеров. Разумеется, никаких ошибок она не выдает, да и неоткуда им взяться. А если у Вас возникают ошибка, то будьте так любезны - выложите ПОДРОБНУЮ информацию - где именно? Что сообщает транслятор? Ну и т.п. - чем больше, тем лучше. Будем разбираться.
P.S. А слово "программа" пишется с двумя "м". Так, на будущее.

А это сможешь проверить ? Дано целое число n, удовлетворяющее условию 0< модуль н но меньше либо равно 2*10 в девятой степени . Найти максимальную цифру в записи этого числа.
var
n,i:integer;
k:char;
Chis:array of char;
str:string;
begin
writeln('Enter N:');
readln(n);
str:=inttostr(n);
setlength(chis,length(str));
for i:=0 to high(chis) do
chis:=str[i+1];
k:='0';
for i:=0 to high(chis) do
if k<chis then k:=chis;
Writeln('MAX= ',k);
readln
END.
 
А это сможешь проверить ?
Пожалуй, что и нет. Потому как чего-то настолько неудобопонятное накручено, что разбираться в этом деле нету ни времени, ни желания. Что это за Паскаль? АВС? Если так, то я этого ублюдочного изделия не знаю, у меня обычный Turbo.
Но в любом случае - одна грубейшая ошибка тут просто гвоздём в ботинке торчит. А именно - для работы с десятизначными целыми числами формат Integer неприемлем, там максимальное (по модулю) значение - 32000 с копейками, т.е. пятизначное число. А условию задачи соответствует формат LongInt.
Всё, что могу предложить - это собственный вариант решения задачки.
Код:
var
 N,d:LongInt;
 i,lng,mx,q:byte;
BEGIN
 write('Enter N: ');
 readln(N);
 lng:=1+TRUNC(Ln(Abs(N))/Ln(10));
 d:=ROUND(Exp((lng-1)*Ln(10)));
 mx:=0;
 for i:=1 to lng do
  begin
   q:=N div d;
   if q>mx then mx:=q;
   N:=N mod d;
   d:=d div 10;
  end;
 writeln('MAX= ',mx);
 readln
END.
Здесь lng - количество цифр в записи числа, d - максимальная степень числа 10, не превосходящая N. Так, при N=2341 lng=4 и d=1000.
 
А ты умеешь составлять блок схемы если да то помоги пожалуста составить к этому заданию блок схему с помощью разветвляющихся алгоритмов
 
А что за ошибка неизвестный индетификатор в строчке где lng:=1+TRUNC(Ln(Abs(N))/Ln(10));
 
А что за ошибка неизвестный индетификатор в строчке где lng:=1+TRUNC(Ln(Abs(N))/Ln(10));
Понятия не имею. И повторяю вопрос - что у Вас за Паскаль? Если АВС - то за его многочисленные глюки я не отвечаю. Еще раз обращаю внимание - любая, даже самая простая и короткая программа выкладывается мною ТОЛЬКО после тестирования. В нормальном Турбо-Паскале. А то что эти придурки, авторы АВС, повыкидывали самые ходовые операторы и насовали каких-то своих неудобопонятных - так это проблемы пользователей АВС.
 
Назад
Сверху