Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на сравнения
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
maq
Ребят, помогите полегче решить задачу, а то фигня какая-то получается... blink.gif

Даны действит. числа a,b,c,d
Разраб. программу, кот. сравнивает эти числа
- Если a<=b<=c<=d, то наименьшее число заменить наибольшим из них
- Если a>b>c>d, то числа оставить без изменений, а иначе наибольшее заменить наименьшим.

Интересует в общем только вторая часть. Спасибо заранее.
klem4
Ты бы показал свою фигню, мы бы поправили, а вообще я бы хранил 4 числа в массиве, так как нам надо будет запмнить номера, где располагаются макс. и мин. элементы. Алгоритм значит такой : Ищешь в массиве номера максимального и минимального элементов, запоминаешь их, потом проверяешь для массивов свои условия : Если массив образует неубывающую последовательность, то x[imin] := x[imax], иначе если последовательность возпрастающая, то оставить числа без зименений, иначе x[imax] := x[imin];
maq
klem4, спасибо за ответ!

Вот написал, но сдается мне, что что-то не сходится wacko.gif

Код
program la;
uses crt;
var k:array[1..4] of integer;
i,tmp1,tmp2,imax,imin:integer;
begin;
clrscr;
writeln('Vvedite a b c d:');
readln(k[1],k[2],k[3],k[4]);
if (k[1]<=k[2]) and (k[2]<=k[3]) and (k[3]<=k[4]) then k[1]:=k[4];
if (k[1]>k[2]) and (k[2]>k[3]) and (k[3]>k[4]) then else
begin;
  tmp1:=K[1];
  tmp2:=k[1];
   for i:=2 to 4 do
    begin
     if k[i]>tmp1 then
      begin
       imax:=i;
       tmp1:=k[i];
      end;
     if k[i]<tmp2 then
      begin
       imin:=i;
       tmp2:=k[i];
      end;
    end;
   k[imax]:=k[imin];
end;
write('a=',k[1],'b=',k[2],'c=',k[3],'d=',k[4]);
readkey;
end.


буду благодарен, если кто поможет rolleyes.gif
volvo
blink.gif
Так нельзя?
program la;
uses crt;
var
a, b, c, d: integer;
begin;
clrscr;
writeln('Vvedite a b c d:');
readln(a, b, c, d);

if (a<=b) and (b<=c) and (c<=d) then a := d
else
if (a>b) and (b>c) and (c>d) then { Ничего не делать }
else d := a;

write('a = ',a,' b = ',b,' c = ',c,' d = ',d);
readkey;
end.
maq
volvo, не к сож. так не получится т.к.:
Код
Vvedite a b c d: 1 6 3 5
a=1 b=6 c=3 d=1

Не определяется максимальное число...
Но все равно спасибо за ответ%)

Кстати в программе, которую я написал прикол еще лучше:
Код
Vvedite a b c d: 1 6 2 9
a=1 b=6 c=2 d=69


Не пойму, в чем ошибка... blink.gif
volvo
maq, ты свое же задание ВНИМАТЕЛЬНО читал? Что по-твоему должно произойти если
Цитата
Vvedite a b c d: 1 6 2 9
?

Все, понял... Сделаем smile.gif
volvo
Вот так (кстати, этот алгоритм и предлагал во втором посте klem4 yes2.gif ):
program la;
uses crt;
var
ar: array[1 .. 4] of integer;
i, min, max: integer;
begin;
clrscr;
writeln('Vvedite a b c d:');
readln(ar[1], ar[2], ar[3], ar[4]);

min := 1; max := 1;
for i := 2 to 4 do begin
if ar[max] < ar[i] then max := i;
if ar[min] > ar[i] then min := i;
end;

if (ar[1]<=ar[2]) and (ar[2]<=ar[3]) and (ar[3]<=ar[4])
then ar[min] := ar[max]
else
if (ar[1]>ar[2]) and (ar[2]>ar[3]) and (ar[3]>ar[4]) then
else ar[max] := ar[min];

write('a = ',ar[1],' b = ',ar[2],' c = ',ar[3],' d = ',ar[4]);
readkey;
end.
maq
volvo, я это задание наизусть уже выучил smile.gif
Но ведь нужно наибольшее заменить наименьшим, а тут так не получается... wacko.gif

[добавлено]
поздно запостил, но все же...
[/добавлено]
maq
volvo, спасибо за программу! Все работает! good.gif
Я тоже примерно так сделать хотел, но почему-то решил находить min&max в конце. И вообще с ошибкой получилось.
Спасибо за помощь! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.