Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Максимальное число

Автор: Clane 13.11.2002 23:31

Вот алгоритм поиска максимального числа в массиве.

Код
program maxmassiv(input,output);
var a: array [1..10] of Byte;
Max:integer;
I:byte;
begin
I:=0;
for I:=1 to 10 do
begin
writeln('Enter an integer:');
readln(a[i]);
end;
Max:=A[1];
For I:=1 to 10 do
begin
if Max<A[I] then Max:=A[I];
end;
writeln(Max);
readln;
readln;
end.

Автор: Alex 14.11.2002 0:33

Ну это Clane по-моему примитивщина.Мне кажется здесь надо писать алгоритмы посложнее.Например слияние, переворот на 90 градусов и тд и тп.

Автор: Clane 14.11.2002 0:50

Может это и примитивщина, но для новичков сойдет.. Тем более что просто никто ничего не пишешь, вот я решил что-то черкнуть..

Автор: Ivs 14.11.2002 1:22

Определение максимального из 2-х чисел:
max:=int((abs(a-B)+a+B)/2);
усе.............

Автор: Ivs 15.11.2002 1:32

Цитата
Ну это Clane по-моему примитивщина.Мне кажется здесь надо писать алгоритмы посложнее.Например слияние, переворот на 90 градусов и тд и тп.

Ну напиши -- посмотрим...........

Автор: Alex 15.11.2002 20:01

ЧО написать-то не понял!!!!

Автор: Alex 15.11.2002 21:30

Если переворот на 90 градусов(например вправо), то вот он алгоритм(мой):
program perevorot;

Код
uses Crt;
const n=5;
var a,c:array [1..n,1..n] of integer;i,j,s:integer;
begin
ClrScr;
Randomize;
s:=n;
for i:=1 to n do begin
 for j:=1 to n do begin
a[i,j]:=Random(21)+10;
c[j,s]:=a[i,j];
write(a[i,j],' ');
 end;
s:=s-1;
writeln;
end;
writeln;
for i:=1 to n do begin
 for j:=1 to n do begin
 a[i,j]:=c[i,j];
 write(a[i,j],' ');
 end;
 writeln
 end;
readln
end.

если на 180 градусов (тоже вправо), то алгоритм чуть-чуть изменяется на:
Код
s:=n;
for i:=1 to n do begin
 k:=n;
 for j:=1 to n do begin
a[i,j]:=Random(21)+10;
c[s,k]:=a[i,j];
write(a[i,j],' ');
 k:=k-1;
 end;
s:=s-1;
writeln;
end;

соответственно переменную k надо описать.

Автор: Dogmatic 1.12.2002 0:56

Clane, во 2-м цикле не for i := 1 to 10, а for i := 2 to 10, зачем лишний раз сравнивать Max и A[1]=Max. К тому же begin и end в цикле с одним оператором не нужны. Знающий поймет, но ты же для новичков пишешь, должно быть как конфетка.

Автор: Clane 1.12.2002 1:42

Угу.. Понял.. Просто иногда сложно в час ночи выловить какие - то баги.. Спасибки еще раз.. Рад видеть тебя на форуме..

Автор: Vit 4.01.2003 7:39

Кстати если кого интересует как это сделать в дельфи, то в модуле Math есть готовая функция для этого

Автор: chucha 23.04.2003 11:47

Может, кто поможет составить программу!!!
В Pascale – только учусь
Не могу составить программу:

Дана матрица а:array[1..n,1..m]
мне необходимо  суммировать в каждой строке элементы, которые равны 1,
потом полученные результаты от каждой строки сравнить между собой и вывести на экран номер той строки, в которой сумма будет максимальной.
Например:
      - в этой матрице программа должна вывести строку№2, т.к. в ней сумма                                элементов равных 1 больше чем в остальных строках.
Никак не разберусь, хожу только вокруг да около.
Заранее большое  благодарю тем, кто поможет разобраться с этой задачей.
smile.gif

Автор: Shadow 23.04.2003 14:59

:D
их индексы равны единице
или сами числа

Автор: chucha 23.04.2003 15:29

равны единице
сами числа smile.gif

Пример:

первоя строка[1 0 1 0 0]
втрая строка  [1 1 1 1 1]
третья строка[1 0 1 0 1]
в этой матрице программа должна вывести строку№2, т.к. в ней сумма       элементов равных 1 больше чем в остальных строках.
Никак не разберусь, хожу только вокруг да около.
Заранее большое  благодарю тем, кто поможет разобраться с этой задачей.

Автор: Shadow 23.04.2003 16:23

:D sorry
а только 1 и 0 или друг числа

Автор: chucha 23.04.2003 16:52

В принципе подсчет только тех элементов матрицы, которые =1, а остальные не важно ноль там стоит или другое число.

вообще матрица должна вводится в ходе программы, т.е. программа должна сделать запрос на ввод матрицы с клавиатуры.

smile.gif

Автор: Shadow 24.04.2003 0:24

:'(
отвратиетельный дебильный код написал но работает вроде
---
там протестируешь
-----
кстати насчет нахождение иаксимально числа в массиве а не проще его
от сортировать по возраст и взять последнее число из массива
---

Код
Uses Crt,Dos;
Const color : Array [0..6,0..6] Of byte =
((1,1,1,1,1,1,1),{4}
(1,1,1,1,1,8,1), {6}
(1,1,1,1,1,8,8),  {5}
(6,7,8,1,1,1,1),  {4}
(1,1,1,1,6,1,1),  {3}
(1,1,6,7,5,1,1),   {2}
(1,2,4,0,5,6,0)); {1 13 chtuck}

Var
x,y,x1,y1,d,v,g,n,n1,sum:byte;
x2:byte;
y2:byte;
s,s1,s2,s3,s4,s5,s6:byte;
p,p1,p2,p3,p4:byte;

st:array[0..7] of integer;

label we;

BEGIN
n:=6;
n1:=6;
     for x:=0 to n do
         for y:=0 to n1 do begin

         x1:=color[x,y];


         if x1=1 then begin
          sum:=sum+1;
         end;

         if x=0 then if y=n then begin
         s:=sum;
         st[0]:=s;
         sum:=0;
         end;

         if x=1 then if y=n then begin
         s1:=sum;
         st[1]:=s1;
         sum:=0;
         end;

         if x=2 then if y=n then begin
         s2:=sum;
               st[2]:=s2;
         sum:=0;
         end;

         if x=3 then if y=n then begin
         s3:=sum;
         st[3]:=s3;
         sum:=0;
         end;

         if x=4 then if y=n then begin
         s4:=sum;
         st[4]:=s4;
         sum:=0;
         end;

         if x=5 then if y=n then begin
         s5:=sum;
         st[5]:=s5;
         sum:=0
         end;

         if x=6 then if y=n then begin
         s6:=sum;
         st[6]:=s6;
         sum:=0;
         end;

         end;
            st[7]:=78;
         asm
         mov ax,3
               int 10h

         end;

         write('0st=',s,';  1-st=',s1,'; 2st=',s2,'; 3st=',s3);
         write('; 4st=',s4,'; 5st=',s5,'; 6st=',s6);
         asm
         mov ah,0
         int 16h
         end;
         g:=0;
         v:=0;
         repeat
            p:=st[v];
            v:=v+1;         {0}
              p1:=st[v];         {1}

              if p=78 then goto we;

             if p>p1 then begin
                    st[v]:=p;  {1}
                      v:=v-1;
                         st[v]:=p1;{0}
                         v:=0;

           end;
           Until KeyPressed;

        we:
         gotoxy(10,10);
         write('st0=',st[0],' st1=',st[1],' st2=',st[2],' st3=',st[3]);
         write(' st4=',st[4],' st5=',st[5],' max sum in matrix 1 st6=',st[6]);
                asm
                mov ah,0
                int 16h
                end;

END.

Автор: chucha 24.04.2003 6:15

Огромное спасибо Shadow !!! smile.gif :D

Автор: AlaRic 24.04.2003 14:36

to Chucha: я не по-русски сказал?

Автор: wormball 24.04.2003 21:33

Цитата
Ну это Clane по-моему примитивщина.Мне кажется здесь надо писать алгоритмы посложнее.Например слияние, переворот на 90 градусов и тд и тп.

а ещё лучше то же нахождение максимума, только раз в 10 больше кода. вот тогда ты действительно станешь настоящим Программистом. ;D

Автор: Shadow 25.04.2003 0:18

:D
---
есчли просто отсортировать масс по возрост и взять последнее

Автор: Gid 1.05.2003 7:03

Скажите мне, фигли такая огромная программа?

Код
uses crt;
const n=6;
type mass=array[1..n,1..n]of integer;
       mas=array[1..n]of ibteger;
var
 i,g:integer;
 matr:mass;
 max:mas;
begin
 clrscr;
 writeln('Введите матрицу  ');
 for i:1 to n do for g:=1 to 10 do read(matr[i,g]);
 for i:=1 to n do for g:=1 to n do
      if matr[i,g]=1 then max[i]:=max[i]+1;
 i:=max[1];
 for i:=2 to n do if i<max[i] then i:=max[i];
writeln('Наибодьшая сумма-',i);
end.