Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 04.10.2011, 22:10   #1 (permalink)
димон4ик
Member
 
Регистрация: 02.10.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Даны три вещественных числа...

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

Старый 04.10.2011, 22:10
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посмотрите внимательно тут, может разгадка совсем рядом

Найти площадь выпуклого многоугольника, если даны координаты вершин многоугольника
Паскаль. Сумма цифр числа
Паскаль. Обработка натурального числа
Массивы

Старый 06.10.2011, 10:06   #2 (permalink)
димон4ик
Member
 
Регистрация: 02.10.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Нужно завтро здать люди помогите плиз??

Даны три вещественных числа. Если из них можно составить возрастающую арифметическую прогрессию, то вывести эту прогрессию.
На Паскале.
димон4ик вне форума   Ответить с цитированием
Старый 06.10.2011, 10:14   #3 (permalink)
димон4ик
Member
 
Регистрация: 02.10.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

посмотрите правильно ли я написал эту програму
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;
димон4ик вне форума   Ответить с цитированием
Старый 06.10.2011, 10:46   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от димон4ик Посмотреть сообщение
посмотрите правильно ли я написал эту програму
Структурно - правильно, и даже остроумно. Но ошибок много:

1.
Цитата:
Сообщение от димон4ик Посмотреть сообщение
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 15.10.2011, 17:33   #5 (permalink)
димон4ик
Member
 
Регистрация: 02.10.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Структурно - правильно, и даже остроумно. Но ошибок много:

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
димон4ик вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 15.10.2011, 19:07   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от димон4ик Посмотреть сообщение
Вот эта строчка что то не правильно if ((max + min)/2 = sred) then
В каком смысле? Почему неправильно? Я считаю, что всё правильно. Поясните.
Vladimir_S вне форума   Ответить с цитированием
Старый 16.10.2011, 09:41   #7 (permalink)
димон4ик
Member
 
Регистрация: 02.10.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
В каком смысле? Почему неправильно? Я считаю, что всё правильно. Поясните.
Почему надо делить на 2 если нам нужно найти разность чисел тоесть d чтобы узнать какая это прогрессия програма выдает ошибку

Последний раз редактировалось димон4ик; 16.10.2011 в 09:48
димон4ик вне форума   Ответить с цитированием
Старый 16.10.2011, 10:45   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

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

Цитата:
Сообщение от Vladimir_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[i]:=str[i+1];
k:='0';
for i:=0 to high(chis) do
if k<chis[i] then k:=chis[i];
Writeln('MAX= ',k);
readln
END.
димон4ик вне форума   Ответить с цитированием
Старый 16.10.2011, 20:38   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от димон4ик Посмотреть сообщение
А это сможешь проверить ?
Пожалуй, что и нет. Потому как чего-то настолько неудобопонятное накручено, что разбираться в этом деле нету ни времени, ни желания. Что это за Паскаль? АВС? Если так, то я этого ублюдочного изделия не знаю, у меня обычный 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:17.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.