Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Массив годов и работа с числом. Pascal, PascalABC (http://www.tehnari.ru/f41/t106001/)

Solom1k 23.12.2015 22:42

Массив годов и работа с числом. Pascal, PascalABC
 
Добрый вечер, участники форума. Помогите, пожалуйста
В массиве данных найти год, у которого разница между наибольшей и наименьшей среднемесячными температурами была бы минимальной.
Дано некое число. Выбросить из него наибольшую и наименьшую цифру. Если наиболее высокая цифра не одна, выбросить их все, аналогично поступить с наименьшей цифрой.
Если нельзя полное решение, то хотя бы подсказку.Благодарю

Vladimir_S 24.12.2015 10:36

Цитата:

Сообщение от Solom1k (Сообщение 1191773)
Дано некое число. Выбросить из него наибольшую и наименьшую цифру. Если наиболее высокая цифра не одна, выбросить их все, аналогично поступить с наименьшей цифрой.

Пожалуйста.
Несколько пояснений.
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.


Vladimir_S 24.12.2015 11:21

Цитата:

Сообщение от Solom1k (Сообщение 1191773)
В массиве данных найти год, у которого разница между наибольшей и наименьшей среднемесячными температурами была бы минимальной.

Код:

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.


Solom1k 24.12.2015 12:42

Cпасибо вам большое. На ABC все работает, задачу понял.


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.