Подраздел FAQ (ЧАВО, ЧАстые ВОпросы) предназначен для размещения готовых рабочих программ, реализаций алгоритмов. Это нечто вроде справочника, он наполнялся в течение 2000х годов. Ваши вопросы, особенно просьбы решить задачу, не пройдут предмодерацию. Те, кто наполнял раздел, уже не заходят на форум, а с теми, кто на форуме сейчас, лучше начинать общение в других разделах. В частности, решение задач — здесь.
решения: МАТРИЦЫ, МАССИВЫ. задачи, Фрагменты матриц. Методы сортировки
1. Задан массив A из 100 чисел. Описать функцию для определения количества нечетных чисел среди его первых N элементов. В качестве параметров взять A и N. Если нечетных нет, то результат функции - число 7777777.
2. Задан двумерный целочисленный массив G размером 10 на 10 элементов. Написать процедуру для определения числа тех строк массива, которые не содержат чисел из первой строки.
3. Даны 2 матрицы A(M,N) и B(N,N). Подсчитать и вывести на экран общее количество отрицательных элементов, определить в какой из матриц среднее арифметическое значение прочих элементов имеет большую величину.
4. Дан вещественный массив X(M) найти элемент массива, значение которого наиболее близко к какому нибудь целому числу.
5. Составить программу, выводящую на экран номера элементов массива, кратных четырем.
6. Составить алгоритм и программу для сортировки массива по следующему принципу следования элементов: максимальный элемент, минимальный элемент, 2й по величине, предпоследний, 3й по величине, 3й с конца и т.д.
7. Задача: определить номер минимального элемента заданного одномерного массива.
1. Задан массив A из 100 чисел. Описать функцию для определения количества нечетных чисел среди его первых N элементов. В качестве параметров взять A и N. Если нечетных нет, то результат функции - число 7777777.
uses crt; var a:array[1..100] of integer; i,n:integer; function Nech(b:array of integer; m:integer):word; var k,j:integer; begin k:=0; j:=0; for j:=1 to m do begin if b[j] mod 2<>0 then k:=k+1; end; if k=0 then Nech:=7777 else Nech:=k; end; begin ClrScr; Randomize; for i:=1 to 100 do begin a[i]:=random(9)+1; write(a[i]:2); end; writeln; write('Input n -> ');readln(n); writeln('Output -> ',Nech(a,n)); readln; end.
2. Задан двумерный целочисленный массив G размером 10 на 10 элементов. Написать процедуру для определения числа тех строк массива, которые не содержат чисел из первой строки.
uses crt; const n=5;{ Размерность массива } var a:array[1..n,1..n] of integer; q:array[1..n] of integer; i,j,k,y,t:integer; b:boolean; begin ClrScr; Randomize; {=== Заполняем массив ===} for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=random(99)+1; write(a[i,j]:4); end; writeln; end; {--------- Begin --------} k:=0;t:=1; for i:=2 to n do begin b:=true; for j:=1 to n do begin for y:=1 to n do if a[i,j]=a[1,y] then begin b:=false; break; end; end; if b then begin k:=k+1; q[t]:=i; t:=t+1; end; end; {---------- End ---------} writeln('Таких строк: ',k); write('Вот их номера: ');for i:=1 to t-1 do write(q[i],' '); readln; end.
3. Даны 2 матрицы A(M,N) и B(N,N). Подсчитать и вывести на экран общее количество отрицательных элементов, определить в какой из матриц среднее арифметическое значение прочих элементов имеет большую величину.
program too_matrix; const m=4; n=5; var A:array[1..m,1..n] of integer; B:array[1..n,1..n] of integer; i,j,Sa,Sb,k: integer; ka,kb : integer; SredA,SredB: real; begin k:=0; ka:=0; kb:=0; for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=random(10)-5; write(a[i,j]:3); if a[i,j]<0 then begin k:=k+1; ka:=ka+1; Sa:=Sa+abs(a[i,j]); end; end; writeln; end; writeln; for i:=1 to n do begin for j:=1 to n do begin b[i,j]:=random(10)-5; write(b[i,j]:3); if b[i,j]<0 then begin k:=k+1; kb:=kb+1; Sb:=Sb+abs(b[i,j]); end; end; writeln; end; writeln('Elements < 0: ',k); if ka<>0 then SredA:=Sa/ka; if kb<>0 then SredB:=Sb/kb; if SredA>SredB then writeln('В массиве A среднее арифметическое отрицательных элементов больше.') else if SredB>SredA then writeln('В массиве B среднее арифметическое отрицательных элементов больше.') else writeln('Одинаково!'); readln; end.
4. Дан вещественный массив X(M) найти элемент массива, значение которого наиболее близко к какому нибудь целому числу.
program n_2; const m=10; var x : array[1..m] of real; i,index : integer; min,res : real; begin for i:=1 to m do begin write('x[',i,']='); readln(x[i]); end; min:=1; for i:=1 to m do begin if frac(x[i])>=0.5 then res:=1-frac(x[i]) else res:=1-(1-frac(x[i])); if res<min then begin min:=res; index:=i; end; end; write('Output: ',x[index]:0:3); readln; end.
5. Составить программу, выводящую на экран номера элементов массива, кратных четырем.
program Mod4; const n=8; { Размерность массива } var i : byte; a : array [1..n] of integer; begin { Заполнение массива } for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; for i:=1 to n do if a[i] mod 4 = 0 then write(i,' '); readln; end.
6. Составить алгоритм и программу для сортировки массива по следующему принципу следования элементов: максимальный элемент, минимальный элемент, 2й по величине, предпоследний, 3й по величине, 3й с конца и т.д.
program Sort_Mas; const n=8; { Размерность массива } var i,j : byte; { Счетчики в циклах } imin: byte; { Индекс минимального элемента } k,c : integer; min : integer; { Минимальный элемент } a : array [1..n] of integer; begin { Заполнение массива } for i:=1 to n do begin write('a[',i,']='); readln(a[i]); end; { Пузырьковая сортировка по возрастанию } for i:=2 to n do for j:=n downto i do begin if a[j-1]>a[j] then begin c:=a[j-1];a[j-1]:=a[j];a[j]:=c; end; end; { Ставим максимальные элементы на нужные позиции } i:=1;k:=n; while k>(n div 2)+1 do begin c:=a[i]; a[i]:=a[k]; a[k]:=c; i:=i+2; k:=k-1; end; { Ставим минимальные элементы на нужные позиции } i:=2;k:=0; while k<(n div 2) do begin min:=a[i-1];imin:=i-1; for j:=i-1 to n do if a[j]<min then begin min:=a[j];imin:=j;end; c:=a[i]; a[i]:=a[imin]; a[imin]:=c; i:=i+2; k:=k+1; end; { Вывод отсортированного массива } for i:=1 to n do write(a[i],' '); readln; end.
7. Задача: определить номер минимального элемента заданного одномерного массива.
uses crt; const Len = 10 var mas: array[1 .. Len] of integer; min, n, i:integer; begin { заполняем массив } randomize; for i:=1 to Len do mas[i]:=random(100);
{ собственно сортировка } min:=mas[1]; {начальный минимальный эл-т} n = 1 for i := 2 to Len do begin {т.к. 1 элемент изначально взят за минимальный} if min > mas[i] then begin min := mas[i]; n := i; end; end;
{ В n содержится номер минимального элемента } end.