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

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

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

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

Массив годов и работа с числом. Pascal, PascalABC

  • Автор темы Автор темы Solom1k
  • Дата начала Дата начала

Solom1k

Ученик
Регистрация
23 Дек 2015
Сообщения
4
Реакции
0
Баллы
0
Массив годов и работа с числом. Pascal, PascalABC

Добрый вечер, участники форума. Помогите, пожалуйста
В массиве данных найти год, у которого разница между наибольшей и наименьшей среднемесячными температурами была бы минимальной.
Дано некое число. Выбросить из него наибольшую и наименьшую цифру. Если наиболее высокая цифра не одна, выбросить их все, аналогично поступить с наименьшей цифрой.
Если нельзя полное решение, то хотя бы подсказку.Благодарю
 
Дано некое число. Выбросить из него наибольшую и наименьшую цифру. Если наиболее высокая цифра не одна, выбросить их все, аналогично поступить с наименьшей цифрой.
Пожалуйста.
Несколько пояснений.
1. Поскольку задача решена через строковый формат, максимальная длина числа составляет 255 цифр.
2. Программа написана на Free Pascal. Естественно, оттестирована. За возможные глюки этого идиотского АВС (может закапризничать Val) автор не отвечает.
Код:
Var
 S:String;
 Q,Qmin,Qmax:Byte;
 i,Code,L:Integer;
 b:boolean;


Begin
 Repeat
  b:=true;
  Writeln('Enter the number:');
  Readln(S);
  L:=Length(S);
  for i:=1 to L do
   if (Ord(S[i])<48) or (Ord(S[i])>57) then
    begin
     b:=false;
     Writeln('Only digits allowed!');
    end;
 Until b;
 Val(S[1],Qmin,Code);
 Val(S[1],Qmax,Code);
 for i:=2 to L do
  begin
   Val(S[i],Q,Code);
   if Q<Qmin then Qmin:=Q;
   if Q>Qmax then Qmax:=Q;
  end;
 i:=0;
 Repeat
  Inc(i);
  Val(S[i],Q,Code);
  if (Q=Qmax) or (Q=Qmin) then
   begin
    Delete(S,i,1);
    Dec(i);
    Dec(L);
   end;
 Until i=L;
 Writeln('Result:');
 Writeln(S);
 Readln
End.
 
В массиве данных найти год, у которого разница между наибольшей и наименьшей среднемесячными температурами была бы минимальной.
Код:
Const
 NofY=10; {number of years}

Var
 T:Array[1..NofY,1..12] of Integer;
 i,j,Imin:Byte;
 Min,Max,Dif,MinDif:Integer;

Begin
 Randomize;
 Writeln('Medium temperatures:');
 Writeln('      Jn    Fb    Mr    Ap    My    Ju    Jl    Ag    Sp    Oc    Nv    Dc');
 for i:=1 to NofY do
  begin
   write(i+2019);
   for j:=1 to 12 do
    begin
     T[i,j]:=-Abs(6-j)*6+Random(49);
     write(T[i,j]:4,'  ');
    end;
   writeln;
  end;
 MinDif:=200;
 for i:=1 to NofY do
  begin
   Min:=100;
   Max:=-100;
   for j:=1 to 12 do
    begin
     if T[i,j]<Min then Min:=T[i,j];
     if T[i,j]>Max then Max:=T[i,j];
    end;
   if (Max-Min)<MinDif then
    begin
     Imin:=i;
     MinDif:=(Max-Min);
    end;
  end;
 Writeln('Result: year ',Imin+2019,',  difference ',MinDif);
 Readln
End.
 
Cпасибо вам большое. На ABC все работает, задачу понял.
 
Назад
Сверху