• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Массивы на Паскале

  • Автор темы Автор темы Vikki
  • Дата начала Дата начала

Vikki

Ученик
Регистрация
2 Дек 2012
Сообщения
7
Реакции
0
Баллы
0
Массивы на Паскале

Помогите пожалуйста с массивами на паскале, хотя бы пару задач.
1. В заданном одномерном массиве С выяснить, какое число встречается раньше - положительное или отрицательное и его индекс.
2. Составить программу, отыскивающую среди пар элементов (1 и 2, 3 и 4, 5 и 6, и т.д.) одномерного массива М те, разность между элементами которых есть величина, наибольшая для данного массива.
3. В одномерном массиве удалить те элементы, для которых a>=i
4. Вставить элемент С перед всеми нечетными элементами, стоящими на четных местах.
5. Найти наименьший элемент матрицы. Записать нули в строку и столбец, в которых он находится.
6. Дана матрица целых чисел размером 4х5. Напечатайте индексы всех ее седловых точек. (Седловой точкой называется элемент, который является наименьшим в своей строке и наибольшим в своем столбце или наоборот).
7. Удалить все строки и столбцы, на пересечении которых стоят отрицательные элементы.
 
1) Задание
Код:
program Array1;
var
i:integer; // счетчик в цикле
N:integer; // размер массива
C: array [1..10] of integer;
begin
// ввод данных
writeln('Введите N (N<=10)');
 readln(N);
 writeln('Введите элементы массива');
 for i:=1 to N do begin read(C[i]); end; // формирование массива

 for i:=1 to N do begin
 if C[i]>0 then begin writeln('положительное число встечается раньше индекс элемента = ',i); break; end;
 if C[i]<0 then begin writeln('отрицательное число встечается раньше индекс элемента = ',i); break; end;
 end;
end.

Пример:

----------------------------------------
Введите N (N<=10)
5
Введите элементы массива
0 0 0 0 -9 2
отрицательное число встечается раньше индекс элемента = 5
----------------------------------------
 
3. В одномерном массиве удалить те элементы, для которых a>=i

Код:
Const
 Nmax=20;
Var
 a,b:Array[1..Nmax] of Integer;
 N,M,i:Integer;
Begin
 Write('Number of elements (<20) = ');
 Readln(N);
 M:=0;
 Randomize;
 Writeln('Old:');
 For i:=1 to N do
  begin
   a[i]:=Random(N);
   write(a[i]:4);
   if a[i]<i then
    begin
     Inc(M);
     b[M]:=a[i];
    end;
  end;
 Writeln;
 Writeln('New:');
 For i:=1 to M do write(b[i]:4);
 Readln
End.
 
2)
Код:
program Array1;
var
i:integer; // счетчик в цикле
N:integer; // размер массива
M: array [1..10] of integer;
Max:integer;
begin
// ввод данных
writeln('Введите N (N<=10)');
 readln(N);
 writeln('Введите элементы массива');
 for i:=1 to N do begin read(M[i]); end; // формирование массива
Max:=1;
 for i:=1 to N div 2 do begin
if abs(M[i*2]-M[i*2-1])>abs(M[Max*2]-M[Max*2-1]) then Max:=i;
 end;
 Writeln('Номера пары элементов между которыми разница наибольшая =',Max*2,' ',Max*2-1);
end.

Пример:
_______________________________________________________
Введите N (N<=10)
8
Введите элементы массива
1 2 3 -9 4 6 0 5
Номера пары элементов между которыми разница наибольшая =4 3
_______________________________________________________
 
4)
Код:
program Array1;
var
i,j:integer; // счетчик в цикле
NewN,C,N:integer; // размер массива
M: array [1..10] of integer;
NewM: array [1..20] of integer;

begin
// ввод данных
writeln('Введите C ');
 readln(C);
writeln('Введите N (N<=10)');
 readln(N);
 writeln('Введите элементы массива');
 for i:=1 to N do begin read(M[i]); end; // формирование массива
i:=1;
j:=1;
NewN:=N;
for  i:=1 to N do    begin
if (odd(M[i]))and(not odd(i)) then
 begin
 inc(NewN); // увеличиваем массив
 NewM[j]:=C; // вставляем значение
 inc(j);
 end;
NewM[j]:=M[i]; // вставляем значение
inc(j);
 end;
 Writeln('Новый массив =');
for i:=1 to NewN do begin write(NewM[i],' '); end; // формирование массива

end.

Пример:
________________________________________________________
Введите C
0
Введите N (N<=10)
10
Введите элементы массива
1 3 5 7 9 11 13 15 17 19
Новый массив =
1 0 3 5 0 7 9 0 11 13 0 15 17 0 19
________________________________________________________
 
5)
Код:
program Matrix1;
var
j,i,M,N:integer;
a: array [1..10,1..10] of integer;
minI,minJ:integer;
begin
// Ввод данных
writeln('Введите числа M (M<=10) и N (N<=10)');
 read(N); readln(M);
// Решение
minI:=1;
minJ:=1;
 for i:=1 to N do begin
 for j:=1 to M do
 begin
 a[i,j]:=random(100); // заполнение матрицы случайными значениями
 if a[i,j]<a[mini,minj] then begin mini:=i; minj:=j; end;
 end;
 end;
writeln('Исходный массив');
 for i:=1 to N do begin
 writeln;
 for j:=1 to M do write(a[i,j]:3,' ');
 end;

// Ответ
 for j:=1 to M do a[mini,j]:=0;
 for i:=1 to N do a[i,minj]:=0;
writeln;
writeln('Ответ');
 for i:=1 to N do begin
 writeln;
 for j:=1 to M do write(a[i,j]:3,' ');
 end;
end.
 
7. Удалить все строки и столбцы, на пересечении которых стоят отрицательные элементы.
Код:
Type
 Num=Record
      X:Integer;
      Y:Integer;
     end;
Var
 M,N,i,j,p,Q:Integer;
 Cross:Array[1..128] of Num;
 A:Array[1..8,1..16] of Integer;
 B1,B2:boolean;
Begin
 M:=8;
 N:=16;
 Q:=0;
 Randomize;
 Writeln('Initial:');
 For i:=1 to M do
  begin
   For j:=1 to N do
    begin
     A[i,j]:=95-Random(100);
     write(a[i,j]:4);
     if A[i,j]<0 then
      begin
       Inc(Q);
       Cross[Q].X:=i;
       Cross[Q].Y:=j;
      end;
    end;
   Writeln;
  end;
 Writeln;
 Writeln('Transformed:');
 For i:=1 to M do
  begin
   B1:=True;
   for p:=1 to Q do
    if i=Cross[p].X then B1:=False;
   if B1 then
    for j:=1 to N do
     begin
      B2:=True;
      for p:=1 to Q do
       if j=Cross[p].Y then B2:=False;
      if B2 then write(A[i,j]:4);
     end;
   If B1 then Writeln;
  end;
 Readln
End.
 
Код:
program Matrix1;
var
j,i,M,N:integer;
a: array [1..10,1..10] of integer;
II,III,Jmin,Jmax:integer;
min,max:integer;
begin
// Ввод данных
writeln('Введите числа M (M<=10) и N (N<=10)');
 read(N); readln(M);
// Решение
//minI:=1;
//minJ:=1;
 for i:=1 to N do begin
 for j:=1 to M do
 begin
 a[i,j]:=random(100); // заполнение матрицы случайными значениями
 end;
 end;
writeln('Исходный массив');
 for i:=1 to N do begin
 writeln;
 for j:=1 to M do write(a[i,j]:3,' ');
 end;
writeln;
writeln('Ответ');
////////////////////////////////////////////////////////////
for i:=1 to N do
begin
jmax:=1; jmin:=1;
 for j:=1 to M do
   begin
   if a[i,j]>a[i,jmin] then jmin:=j;
   if a[i,j]<a[i,jmax] then jmax:=j;
   end;
 for III:=1 to N do
   begin
   if a[i,jmin]>=a[iii,jmin] then break;
   end;
   if iii=N then writeln('Седловая точка ',a[i,jmin],' координаты строка = ',i,' столбец = ',jmin);
 for III:=1 to N do
   begin
   if a[i,jmax]<=a[iii,jmax] then break;
   end;
   if iii=N then writeln('Седловая точка ',a[i,jmax],' координаты строка = ',i,' столбец = ',jmax);
end;
end.
Пример:
__________________________________________________________
Введите числа M (M<=10) и N (N<=10)
4
4
Исходный массив

84 74 15 43
6 34 3 62
65 57 37 28
83 73 48 71
Ответ
Седловая точка 48 координаты строка = 4 столбец = 3
_____________________________________________________________
Чем меньше массив тем чаще появляются искомые элементы.
 
Спасибо большое за помощь!
 
Назад
Сверху