Главная » Статьи » Программирование » Pascal

Массивы. Turbo Pascal 7.0

Массивы (примерны можно найти на форуме)

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

Массив - набор однотипных данных, хранящихся вместе и имеющих общее имя.

Возможность объединения групп элементов в массив позволяет, с одной стороны, облегчить массовую обработку данных, а с другой - упростить идентификацию элементов массива.

Каждому элементу массива может быть присвоено одно числовое или символьное значение, поэтому различаются массивы числовые и символьные. Кроме того, массивы могут быть одномерными и многомерными.

Одномерные массивы

 Основные понятия

Массив обозначается одним именем. Так всю совокупность действительных чисел

                    1.6, 14.9,  -5.0,  8.5,  0.46

можно считать массивом и обозначить одним именем, например, А. Образующие массив переменные называются элементами массива.  Каждый элемент массива обозначается именем массива с индексом, заключенным в квадратные скобки.

                    A[1], A[2], A[3], ..., A[n].

Индекс определяет положение элемента массива данных  относительно его начала.

Для рассмотренного выше примера элементами  массива  А  являются:

         A[1]=1.6, A[2]=14.9, A[3]=-5.0, A[4]=8.5, A[5]=0.46

Описание массива

Формат

Var

  <идентификатор,…>:array[тип индекса] of <тип компонент>;

Например:

M: array[1..4] of integer;

MAS: array[1..60] of real;

Для описания массива можно использовать предварительно определенные константы.

Например,

Const

  G1=4; G2=6;

Var

  M1: array[1..G1] of integer;

  M2: array[1..G2] of real;

Заполнение массива

1 Способ (заполнение с клавиатуры. Динамический ввод данных)

Var

  M:array[1..10] of integer;

  I: byte;

Begin

   For I:=1 To 10 Do Begin

       Write('Введите ',I,' значение  ');

       ReadLn(M[I]);

   End;

End.

2 Способ  (с использованием генератора случайных чисел)

Var

  M: array[1..25] of integer;

  I: byte;

Begin

   For I:=1 To 25 Do Begin

       M[I]:=Random(50);

       Write(M[I]:4);

    End;

End.

3 Способ (статический ввод данных)

Const

    M: array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

Var

     I: Integer;

Begin

   For I:=1 To 9 Do

        Write(M[I]:3);

End.

Примеры решения задач

1. Алгоритмы поиска и присвоения значений элементам массива

1. Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива.

 USES Crt;

 CONST   N=10;

 VAR

   A:ARRAY[0..N] OF INTEGER;

   I:BYTE;

 BEGIN

   ClrScr;

   { Заполнение массива }

   FOR I:=1 TO N DO Begin

     Write('Введите ',I,' элемент массива ');  ReadLn(A[I]);

   End;

   { Обработка элементов массива }

   FOR I:=1 TO N DO

     IF A[I]>0 THEN  WriteLn('Положительный элемент = ',A[I],' его индекс = ',I);

 END.

2. Составить программу вычисления и печати значений функции  Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего  из 6 элементов. Значения функции записать в массив Y.

USES Crt;

 VAR

   X,Y:ARRAY[0..6] OF REAL;

   I: BYTE;

 BEGIN

   ClrScr;

   FOR I:=1 TO 6 DO Begin

     Write('Введите ',I,' значение аргумента '); ReadLn(X[I]);

   End;

   FOR I:=1 TO 6 DO Begin

     Y[I]:=SIN(X[I]-1)/(2*X[I]);

     WriteLn(' X= ',X[I]:4:1,'   Y=',Y[I]:5:2);

   End;

 END.

3. Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные  целые числа. Выдать на экран значение каждого пятого и положительного  элемента.  Указанные элементы выдать в строку.

USES Crt;

 VAR

   M:ARRAY[0..30] OF INTEGER;

   I: BYTE;

 BEGIN

   ClrScr;   Randomize;

   WriteLn(' Значения элементов массива');

   FOR I:=1 TO 30 DO Begin

     M[I]:=Random(20)-4;  Write(M[I]:3);

   End;   WriteLn;

   I:=5;

   WriteLn(' Значения каждого пятого и положительного элемента массива');

   While I<=30 DO Begin

     IF M[I] > 0 THEN Write(M[I]:3);

     I:=I+5;

   End;

 END.

Примеры для самостоятельного решения:

1. Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.

2. Дан одномерный массив  размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.

3. Дан одномерный массив  размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.

4. Составить программу вычисления и печати значений функции  Y=(sinx+1)Öcos4x. Значения аргументов задать в массиве X, состоящего  из 10 элементов. Значения функции записать в массив Y.

5. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.  

2. Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива

1. Определить сумму элементов массива Р(n), значения которых > заданного Т

 USES Crt;

 Const   N=30;

 VAR

   P:ARRAY[0..N] OF INTEGER;

   I,T:BYTE;   S:INTEGER;

 BEGIN

   ClrScr;   Randomize;

   { Заполнение массива случайными числами }

   WriteLn(' Значения элементов массива');

   FOR I:=1 TO N DO Begin

     P[I]:=Random(30);   Write(P[I]:3);

   End;   WriteLn;

   Write(' Введите значение переменной   ');   ReadLn(T);

   S:=0;

   FOR I:=1 TO N DO

     IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T }

   WriteLn(' Сумма элементов массива > заданного значения = ',S);

 END.

2. Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму   элементов массива, произведение положительных и количество нулевых   элементов. Результат вычисления вывести на экран.

 USES Crt;

 VAR

   A:ARRAY[0..25] OF INTEGER;

   I: BYTE;   S,K: INTEGER;   P: REAL;

 BEGIN

   ClrScr;  Randomize;

   { Заполнение массива случайными числами }

   WriteLn(' Значения элементов массива');

   FOR I:=1 TO 25 DO Begin

     A[I]:=Random(10)-3;   Write(A[I]:3);

   End;   WriteLn;

   S:=0; K:=0; P:=1;

   FOR I:=1 TO 25 DO Begin

     S:=S+A[I];  { сумма элементов массива }

     IF A[I]>0 THEN P:=P*A[I]; { произведение положительных элементов массива }

     IF A[I]=0 THEN K:=K+1; { количество нулевых элементов массива }

   End;

   WriteLn(' Сумма элементов массива = ',S);

   WriteLn(' Произведение положительных элементов массива = ',P:0:0);

   WriteLn(' Количество нулевых элементов массива = ',K);

 END.

3. Дан массив четных чисел, состоящий из 15 элементов. Заполнить его с   клавиатуры. Найти:

  • сумму элементов, имеющих нечетные индексы;
  • подсчитать количество элементов массива, значения которых больше заданного     числа T и кратны 5;
  • номер первого отрицательного элемента, делящегося на 5 с остатком 2.

 USES Crt;

 CONST   T=11;

 VAR

   A:ARRAY[0..15] OF INTEGER;

   I,NP,FL: BYTE;   S,K: INTEGER;

 BEGIN

   ClrScr;   Randomize;

   { Заполнение массива с клавиатуры }

   FOR I:=1 TO 15 DO Begin

     Write('Введите ',I,' злемент массива ');  ReadLn(A[I]);

   End;   WriteLn;

   S:=0; K:=0; FL:=0;

   FOR I:=1 TO 15 DO Begin

     IF I mod 2 =0 THEN S:=S+A[I]; { сумма элементов, имеющих четные индексы }

     IF (A[I]>T) AND (A[I] mod 5 =0) THEN K:=K+1; { количество }

     IF (A[I]<0) AND (A[I] mod 5 =-2) AND (FL=0) THEN Begin NP:=I; FL:=1; End;

   End;

   WriteLn(' Сумма элементов,имеющих четные индексы = ',S);

   WriteLn(' Количество элементов, значения которых > ',T,' и кратны 5 = ',K);

   WriteLn(' Номер первого отрицательного элемента, делящегося на 5 с остатком 2 = ',NP);

 END.

Примеры для самостоятельного решения:

1. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с   клавиатуры. Найти:

  • сумму отрицательных элементов;
  • количество тех элементов, значения которых положительны и не превосходят заданного числа А;
  • номер последней пары соседних элементов с разными  знаками.

2. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с   клавиатуры.    Найти:

  • сумму элементов, имеющих нечетное значение;
  • вывести индексы тех элементов, значения которых больше заданного числа А;
  • количество положительных  элементов, кратных К. ( К вводится с клавиатуры ).

3. Дан массив целых чисел, состоящий из N элементов. Определить среднее арифметическое положительных элементов.

4. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних  элементов.

5. Оценки, полученные учащимися за урок, занесены в массив. Подсчитать количество «5» и «2», полученных учащимися за урок и средний балл.

6. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в начале очереди до первой женщины.

3. Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса

Дан массив K, состоящий из 45 элементов. Элементы массива - произвольные   целые числа. Определить минимальный элемент массива и его индекс.

USES Crt;

 VAR

   K:ARRAY[0..45] OF INTEGER;

   I,IND: BYTE;   MIN:INTEGER;

 BEGIN

   ClrScr;   Randomize;

   WriteLn(' Значения элементов массива');

   FOR I:=1 TO 45 DO Begin

     K[I]:=Random(35)+6;   Write(K[I]:3);

   End;   WriteLn;

   MIN:=K[1];   IND:=1;

   { нахождение минимального значения и его индекса }

   FOR I:=2 TO 45 DO

     IF K[I]<MIN THEN Begin MIN:=K[I]; IND:=I; End;

   WriteLn(' Минимальное значение = ',MIN);

   WriteLn(' Индекс минимального значения = ',IND);

 END.

Основные понятия

Иногда решение задачи возможно только при наличии  многомерных  массивов, или матриц.      Наиболее часто применяются двумерные массивы, поскольку описывать информацию по  ее позиции в одномерном списке весьма неудобно.  Представьте себе,  как трудно было бы найти свое место на стадионе, если бы на билете  указывался  лишь  порядковый номер сиденья - один из многих тысяч! Билеты же,  на которых проставлены и номер ряда, и номер места, существенно упрощают эту задачу. Составители географических карт тоже  пользуются  таким  приемом. Координаты Парижа,  Осло,  Рима, обозначаются не как 1, 2 или 300, а в терминах градусов широты и долготы. Эти два числа указывают местоположение города относительно экватора и начального (Гринвичского) меридиана.

Каждый элемент двумерного массива  описывается двумя  индексами: первый обозначает  номер строки, а второй - номер столбца.

                    A[4,5], A[2,7], A[6,3], ..., A[m,n].

Описание массива

Формат

Var

  <идентификатор,…>:array[тип индекса] of <тип компонент>;

Например:

M: array[1..4,1..5] of integer; {двумерный массив, состоящий из 4 строк и 5 столбцов}

MAS: array[1..6,1..7] of real;

Для описания массива можно использовать предварительно определенные константы.

Например,

Const

  G1=4; G2=6;

Var

  M1: array[1..G1,1..G2] of integer; 

Заполнение и вывод элементов двумерного массива

1 Способ (заполнение с клавиатуры)

Var

  M:array[1..7,1..5] of integer;

  I,J: byte;

Begin

   For I:=1 To 7 Do  {цикл по строкам}

     For J:=1 To 5 Do   {цикл по столбцам}

       ReadLn(M[I,J]);

End.

2 Способ  (с использованием генератора случайных чисел)

Var

  M: array[1..5,1..4] of integer;

  I,J: byte;

Begin

   For I:=1 To 5 Do Begin

     For J:=1 To 4 Begin

        M[I,J]:=Random(50);

        Write(M[I,J]:4);

    End;

    WriteLn;

  End;

End.

Примеры решения задач

1. Алгоритмы действий над элементами двумерного массива

1. В течение недели измерялась температура три раза в день: утром, в обед и  вечером. Показания записали в таблицу размерностью 7х3. Определить среднюю  температуру за каждый день.

 USES Crt;

 VAR

   T:ARRAY[0..7,0..3] OF INTEGER;

   I,J:BYTE;   S:INTEGER;   ST:REAL;   A:STRING[12];

 BEGIN

   ClrScr;   WriteLn;

   { Заполнение таблицы }

   FOR I:=1 TO 7 DO Begin

     WriteLn(' Введите показания за ',I,' день');

     FOR J:=1 TO 3 DO Begin

       CASE J OF

         1: A:=' Утром - ';

         2: A:=' В обед - ';

         3: A:=' Вечером - ';

       End;

       Write(A);    ReadLn(T[I,J]);

     End;

   End;     WriteLn;

     { Подсчет средней температуры за каждый день }

   FOR I:=1 TO 7 DO Begin

       S:=0;

       FOR J:=1 TO 3 DO

         S:=S+T[I,J];

       ST:=S/3;

       WriteLn('Средняя температура за ',I,' день = ',ST:4:1);

    End;

 END.

2. Группа из 10 учащихся сдавала экзамен по 4 предметам. Результаты    экзаменов записали в таблицу размерностью 10х4. Определить средний балл по каждому предмету.

 USES Crt;

 VAR

   E:ARRAY[0..10,0..4] OF INTEGER;

   I,J:BYTE;   S:INTEGER;   SB:REAL;   A:STRING[16];

 BEGIN

   ClrScr;   WriteLn;

   { Заполнение таблицы }

   FOR I:=1 TO 10 DO Begin

     WriteLn(' Введите оценки ',I,' учащегося');

     FOR J:=1 TO 4 DO Begin

       CASE J OF

         1: A:=' Математика - ';

         2: A:=' Физика - ';

         3: A:=' Химия - ';

         4: A:=' Информатика - ';

       End;

       Write(A);   ReadLn(E[I,J]);

     End;

   End;     WriteLn;

     { Подсчет среднего балла по каждому предмету.  Циклы меняются местами.' }

    FOR J:=1 TO 4 DO Begin

       S:=0;

       FOR I:=1 TO 10 DO

         S:=S+E[I,J];

       SB:=S/10;

       CASE J OF

          1: A:=' математике - ';

          2: A:=' физике - ';

          3: A:=' химии - ';

          4: A:=' информатике - ';

       End;

       WriteLn(' Средний балл по ',A,' = ',SB:4:1);

     End;

   END.

2 Алгоритмы формирования одномерного массива

1. Дан двумерный массив размерностью 5х6, заполненный целыми числами.   Сформировать одномерный массив, каждый элемент которого соответственно   равен сумме элементов строк. Оба массива вывести на экран.

 USES Crt;

 VAR

   H:ARRAY[0..5,0..6] OF INTEGER;   K:ARRAY[0..5] OF INTEGER; 

   I,J:BYTE;   S:INTEGER;

 BEGIN

   ClrScr;   Randomize;

   WriteLn(' Значения двумерного массива');

   FOR I:=1 TO 5 DO Begin

     FOR J:=1 TO 6 DO Begin

       H[I,J]:=Random(23);  Write(H[I,J]:3);

     End;     WriteLn;

   End;   WriteLn;

   { Нахождение суммы элементов строк и заполнение одномерного массива }

   WriteLn(' Значения одномерного массива');

   FOR I:=1 TO 5 DO Begin

     S:=0;

     FOR J:=1 TO 6 DO

       S:=S+H[I,J];    

     K[I]:=S;     Write(K[I]:4);

   End;

 END.

2. Дана квадратная матрица порядка n, заполненная целыми числами.  Получить одномерный массив, элементами которого являются первый  положительный элемент соответствующей строки матрицы.

 USES Crt;

 LABEL   M1;

 CONST   N=5;

 VAR

   H:ARRAY[0..N,0..N] OF INTEGER;   B:ARRAY[0..N] OF INTEGER;

   I,J:BYTE;

 BEGIN

   ClrScr;   Randomize;

   WriteLn(' Значения элементов двумерного массива');

   WriteLn;

   FOR I:=1 TO N DO Begin

     FOR J:=1 TO N DO Begin

       H[I,J]:=Random(25)-10;  Write(H[I,J]:3);

     End;     WriteLn;

   End;   WriteLn;

   WriteLn(' Значения первых положительных элементов соответствующих строк');

   WriteLn;

   FOR I:=1 TO N DO Begin

     FOR J:=1 TO N DO

       IF H[I,J]>0 THEN Begin  B[I]:=H[I,J];   GOTO M1;   End;

     M1: Write(B[I]:3);

   End;

 END.

3. Дан двумерный массив размерностью NхM, заполненная целыми числами.  Получить одномерный массив, элементами которого являются сумма первого  и последнего элементов соответствующих строк двумерного массива.

 USES Crt;

 CONST   N=5;   M=7;

 VAR

   A:ARRAY[0..N,0..M] OF INTEGER;   B:ARRAY[0..N] OF INTEGER;

   I,J:BYTE;

 BEGIN

   ClrScr;   Randomize;

{ Заполнение двумерного массива случайным образом и вывод в виде     прямоугольной          матрицы }

   WriteLn(' Значения элементов двумерного массива');

   WriteLn;

   FOR I:=1 TO N DO Begin

     FOR J:=1 TO M DO Begin

       A[I,J]:=Random(30);    Write(A[I,J]:3);

     End;     WriteLn;

   End;   WriteLn;

   WriteLn(' Cумма первого и последнего элементов соответствующих строк');

   WriteLn;

   FOR I:=1 TO N DO Begin

     B[I]:=A[I,1]+A[I,M];     Write(B[I]:3);

   End;

 END.

4. Дан двумерный массив размерностью 5х6, заполненный целыми числами.  Сформировать одномерный массив каждый элемент которого равен  произведению четных положительных элементов соответствующего столбца.

 USES Crt;

 VAR

   M:ARRAY[0..5,0..6] OF INTEGER;   F:ARRAY[0..6] OF INTEGER;

   I,J:BYTE;   P:LongInt;

 BEGIN

   ClrScr;   Randomize;

   { Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

   WriteLn(' Значения элементов двумерного массива');

   FOR I:=1 TO 5 DO Begin

     FOR J:=1 TO 6 DO Begin

       M[I,J]:=Random(20)-5;   Write(M[I,J]:3);

     End;     WriteLn;

   End;   WriteLn;

   { Формирование одномерного массива}

   WriteLn(' Значения элементов одномерного массива');

   FOR J:=1 TO 6 DO Begin

     P:=1;

     FOR I:=1 TO 5 DO

       IF (M[I,J]>0) AND (M[I,J] mod 2 =0) THEN P:=P*M[I,J];

     IF P=1 THEN F[J]:=0 ELSE F[J]:=P;

     Write(F[J]:4);

   End;

 END.

Примеры для самостоятельного решения:

1. Дан двумерный массив размерностью 6х5, заполненный целыми числами, введенными с клавиатуры.  Сформировать одномерный массив, каждый элемент которого равен  первому четному элементу соответствующего столбца, если такого нет, то равен нулю.

2. Дан двумерный массив размерностью 5х6, заполненный целыми числами.  Сформировать одномерный массив, каждый элемент которого равен  произведению четных положительных элементов соответствующего столбца.

3. Дана квадратная матрица размерностью NхN, заполненная целыми числами и величина А.  Сформировать одномерный массив, каждый элемент которого равен элементу, расположенному на главной диагонали , умноженному на величину А .

4. Дан двумерный массив размерностью 6х8, заполненный целыми числами, введенными с клавиатуры.  Сформировать одномерный массив, каждый элемент которого равен  количеству элементов соответствующих строк матрицы, значения которых находятся в интервале( -2, 10).

3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива

1. В соревнованиях по плаванию принимали участие 5 спортсменов. Соревнования  состояли из 3 заплывов. Результаты заплывов записали в таблицу размерностью  3х5. Получить одномерный массив размером 3, элементами которого будут  лучшие результаты в каждом из заплывов.

 USES Crt;

 VAR

   RZ:ARRAY[0..3,0..5] OF INTEGER; LR:ARRAY[0..3] OF INTEGER;

   I,J:BYTE;

BEGIN

   ClrScr;   WriteLn;

   { Заполнение таблицы }

   FOR I:=1 TO 3 DO Begin

     WriteLn(' Введите результаты ',I,' заплыва');

     FOR J:=1 TO 5 DO Begin

       Write(J,' участник - ');   ReadLn(RZ[I,J]);

     End;

   End;   WriteLn;

   { Определение лучшего результата в каждом из заплывов }

   FOR I:=1 TO 3 DO Begin

     LR[I]:=RZ[I,1];

     FOR J:=2 TO 5 DO

       IF RZ[I,J]<LR[I] THEN LR[I]:=RZ[I,J];

     WriteLn(' Лучший результат ',I,' заплыва = ',LR[I]);

   End;

 END.

2. Дан двумерный массив размерностью 5х6, заполненный целыми числами.  Сформировать одномерный массив, каждый элемент которого равен  наибольшему по модулю элементу соответствующего столбца.

 USES Crt;

 VAR

   M:ARRAY[0..5,0..6] OF INTEGER;   MAX:ARRAY[0..6] OF INTEGER;

   I,J:BYTE;

 BEGIN

   ClrScr;   Randomize;

   WriteLn(' Значения элементов двумерного массива');

   FOR I:=1 TO 5 DO Begin

     FOR J:=1 TO 6 DO Begin

       M[I,J]:=Random(20)-8;  Write(M[I,J]:3);

     End;     WriteLn;

   End;   WriteLn;

   { Формирование одномерного массива}

   WriteLn(' Значения элементов одномерного массива');

   FOR J:=1 TO 6 DO Begin

     MAX[J]:=ABS(M[1,J]);

     FOR I:=2 TO 5 DO

       IF ABS(M[I,J]) > MAX[J] THEN MAX[J]:=ABS(M[I,J]);

     Write(MAX[J]:3);

   End;

 END.

3. Дан двумерный массив размерностью NхM, заполненный случайным образом.  Определить, есть ли в данном массиве строка, в которой имеется два  элемента массива, имеющие наибольшее значение.

 USES Crt;

 CONST   N=6;   M=8;

 VAR

   A:ARRAY[0..N,0..M] OF INTEGER;

   I,J,K,FL:BYTE;   MAX:INTEGER;

 BEGIN

   ClrScr;   Randomize;

   { Заполнение двумерного массива случайным образом и вывод в виде прямоугольной матрицы }

   WriteLn(' Значения элементов двумерного массива');

   FOR I:=1 TO N DO Begin

     FOR J:=1 TO M DO Begin

       A[I,J]:=Random(20);   Write(A[I,J]:3);

     End;     WriteLn;

   End;   WriteLn;

   { Нахождение наибольшего значения }

   MAX:=A[1,1];

   FOR I:=1 TO N DO

     FOR J:=1 TO M DO

       IF A[I,J]>MAX THEN MAX:=A[I,J];

   WriteLn(' Максимальное значение = ',MAX);

   { Нахождение строки, в которой два элемента имеют наибольшее значение }

   FL:=0;

   FOR I:=1 TO N DO Begin

     K:=0;

     FOR J:=1 TO M DO

               IF A[I,J]=MAX THEN Inc(K);

     IF K=2 THEN Begin WriteLn('В ',I,' строке два элемента имеют наибольшее значение');                                     

                                      FL:=1;

     End;

   End;

   IF FL=0 THEN WriteLn(' Нет строк, в которых два элемента имеют наибольшее значение');

 END.

Примеры для самостоятельного решения:

1. Дан двумерный массив размерностью 5x7, заполненный случайным образом. Найти наименьший и наибольший элементы двумерного массива, поменять их местами.

2. Дан двумерный массив размерностью NxM, заполненный случайным образом. Получить одномерный массив, элементами которого являются сумма наименьшего и наибольшего элементов соответственной строки двумерного массива.

Категория: Pascal | Добавил: Алексей (18.10.2014) | Автор: Фролов Алексей E
Просмотров: 9008 | Комментарии: 11 | Теги: программирование, turbo, pascal | Рейтинг: 2.0/1
Всего комментариев: 11
avatar
0
1
Запись в файл.
Код
Program File;
var
  f: file;{файловая переменная f}
begin
  assign(f,'test.txt'); {назначение файловой переменной f имени файла test.txt}
  rewrite(f); {создание файла и открытие его для записи}
  writeln(f,'Запись'); {запись информации в файл}
  close(f); {закрытие файла}
end.
В реальных программах сохранение результатов в файл происходит очень часто.
В этой программе продемонстрирован этот механизм. Поэкспериментируйте с записью чисел, а затем попробуйте их прочитать и использовать в программе. Практически все школьные олимпиады по программированию используют именно такой способ ввода и вывода данных.
avatar
0
11
Я думал, что на деле это выглядит немного сложнее, а оказывается, что это все выглядит очень просто.
avatar
0
2
Поиск файла на диске.
Код
Uses Dos;
Var
  S:SearchRec;
Begin
  FindFirst('*.exe',AnyFile,S);
  While DosError=0 do  
  Begin
  WriteLn(S.Name);
  FindNext(S);
  End;  
End.
А есть ли вообще такой файл на этом диске? Увы но это отнюдь не праздный вопрос. Им задаются многие пользователи. Программа демонстрирует поиск группы файлов с расширением exe (программ). Обратите внимание, как происходит обращение к полю переменной имеющей тип - запись (через точку). Научитесь при работе с файлами использовать обобщающие символы - ? и *.
avatar
0
3
Контроль ввода.
Код
Program Err;
uses crt;
  var i:integer; flag:boolean;
begin
  {$I-}{отключаем контроль ошибок ввода вывода}
  repeat
  readln(i);{ввод значения}
  if IoResult=0 then flag:=true {если нет ошибки, то выходим из цикла}
  else  
  begin
  gotoxy(wherex,wherey-1);{перевод курсора на строку вверх}
  delline; {удаляем строку}
  end;
  until flag;
{$I+}{включаем контроль ошибок ввода вывода}  
end.
В простых программах ошибки при вводе данных могут приводить к неожиданному результату в ее работе. Все зависит от того, как на эту ошибку прореагирует операционная система. Но мы можем проконтролировать появление ошибок сами, предупредив об этом операционную систему.
avatar
0
4
Размер диска.
Код
Program DiskSize;
Uses Dos;
Begin
  WriteLn('DiskSize = ',DiskSize(0) div 1024 div 1024,' Mb'); { объем диска }
  WriteLn('DiskFree = ',DiskFree(0) div 1024 div 1024,' Mb'); { объем свободного пространства на диске }
End.
Раньше именно такими простыми функциями можно было все узнать о диске. Сейчас это может получиться некорректно. Вспомните о количестве байт пространства диска и диапазоне чисел среды Паскаль.
avatar
0
5
Десятки и единицы.
Код
Program DES-ED;
Var
  K, Des, Ed : Integer;

Begin
  Write('Введи десятичное число '); Readln(K);

  Des:= K DIV 10;
  Ed:= K MOD 10;

  Writeln('Количество десятков в числе =', Des);
  Writeln('Количество единиц в числе =', Ed);

Readln; End.
Показано использование операций целочисленного деления и взятия остатка от деления. В практике программистов понимание сути этих действий требуется довольно часто
avatar
0
6
Количество положительных чисел.
Код
program cycle_for;
var i,kn : byte; x:real;
begin
  kn:=0;
  for i:=1 to 10 do
  begin
  writeln('Введите ',i,' число: ');
  readln(x);
  if x>0 then kn:=kn+1 {увеличиваем кол-во на 1}
end;
  writeln('Вы ввели ',kn,' положительных чисел.');
readln
end.
Подсчет количества элементов с определенным признаком довольно частая программистская задача.
avatar
0
7
Оператор Case.
Код
Program Vibor;
var i:integer;   
begin   
   write('Введите целое число: ');   
   readln(i);   
   case i of   
   0,2,4,6,8 : writeln('Четная цифра');   
   1,3,5,7,9 : writeln('Нечетная цифра');   
   10...100 : writeln('Число от 10 до 100);   
   else writeln('Число либо отрицательное, либо > 100');   
end;   
   readln;
end.
Ответ: Если выбор способа реакции программы на определенное условие очень разнообразен, применяем оператор Case (выбор). Реализовать такое ветвление оператором IF было бы затруднительно. Обратите внимание, что условия выбора можно задавать через запятую или диапазоном. А заканчиваться Case должен End-ом.
avatar
0
8
Подача сигнала.
Код
program BipProc;  
Var N : Integer;
  Procedure Bip;
  Begin
  Sound(600); {включение звука, частота 600Гц}
  Delay(100); {Задержка 100мс}
  NoSound; {выключение звука}
  End.
Begin
  Write(‘Введи ненулевое число’); Readln(N);
  If N=0 then  
  Begin Writeln(‘Вы ошиблись’); Bip; end;
End.
Хоть пищание динамиком уже не в моде, такая возможность у программистов осталась. Например, в данном случае напоминание звуком об ошибке вполне актуально.
avatar
0
9
Цитата
составить программу для генерации двумерного массива 3 на 4 из случайных целых чисел и поиска его максимального элемента в паскале


Код
USES Crt;
  CONST  N=3, M=4;
  VAR
  A:ARRAY[0..N][0..M] OF INTEGER;
  i, j, max:integer;
  BEGIN
  ClrScr;
  FOR i:=1 TO N DO Begin
  For j:=1 to M do begin
  Write('Введите ',i,' ',j,' элемент массива ');  ReadLn(A[i][j]);
  if (i==1 and j==1) then max:=A[i][j]  end;
  if (max>A[i][j]) then max:=A[i][j] end;
end  
End;
  END.
avatar
0
10
Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой.
2. Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10.
3. Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран.
4. Составить программу вычисления и печати значений функции Y=(sinx+1)Öcos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y.
5. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i.

Дайте код для примеров.
avatar