Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 5
06.11.2017, 22:38  [ТС] 1
Author24 — интернет-сервис помощи студентам
Помогите решить задачу по Pascal.
Дано числа A1, A2,..., A9; B1, B2,..., B11. Максимальный элемент первой последовательности заменить на максимальный элемент второй последовательности и наоборот.
ПРОГРАММУ ОФОРМИТЬ В ВИДЕ !!!!"ПРОЦЕДУРЫ"!!!!
Сразу спасибо.
Побывал 2 одномерных массива и цыклами по ним проходился , но что то не получалось.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
07.11.2017, 09:54 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
procedure SwpMax(var a, b: array of Integer);
  procedure Swp(var a, b: Integer);
  var t: Integer;
  begin
    t:=a; a:=b; b:=t;
  end;
  function MaxIdx(const a: array of Integer): Integer;
  var r, i: Integer;
  begin
    r:=Low(a); for i:=Low(a)+1 to High(a) do if a[r]<a[i] then r:=i;
    MaxIdx:=r;
  end;
begin
  Swp(a[MaxIdx(a)],b[MaxIdx(b)]);
end;
procedure vWrite(const v: array of Integer; const p: String);
var i: Integer;
begin
  Write(p); for i:=Low(v) to High(v) do Write(' ',v[i]); WriteLn;
end;
procedure vGen(var v: array of Integer; a: Integer; b: Word);
var i: Integer;
begin
  for i:=Low(v) to High(v) do v[i]:=a+Random(b);
end;
var
  a: array [1..9] of Integer;
  b: array [1..11] of Integer;
begin
  Randomize;
  vGen(a,0,100); vGen(b,0,100);
  vWrite(a,'A ='); vWrite(b,'B =');
  SwpMax(a,b);
  vWrite(a,'A''='); vWrite(b,'B''=');
end.
0
35 / 35 / 45
Регистрация: 26.10.2016
Сообщений: 85
07.11.2017, 10:28 3
ThinkerZ, вот вариант с комментариями
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
program HelloWorld;
// Будем считать, что максимальная длина последовательности - 11(можно поменять на любую другую)
const MaxN = 11;
// Объявление типа массивов, которые мы будем использовать в программе
type arr = array [1..MaxN] of real; 
var a, b:  arr; // массивы, которые будут хранить значения элементов последовательности
    na,nb: integer; // количество элементов в массива а и b соответственно
 
// Процедура inputArr предназначена для считывания массива.
// Параметр А - считываемый массив
// Параметр n - количество элементов в массиве.
// Они передаются по ссылке, так как в ходе этой
// процедуры будут менятся их значения.
procedure inputArr(var A: arr;var n: integer);
var i: integer; // переменная для цикла
begin
    // Запрашиваем у пользователя длинну последовательности
    write('Enter size of array:'); 
    // Считываем её
    readln(n);
    // Заправшиваем ввести последовательность
    write('Enter ',n,' elements of array');
    // Считываем её
    for i:=1 to n do
      read(A[i]);
end;
// Процедура outputArr предназначена для вывода элементов массива на экран
// Параметр а - выводимый массив
// Параметр n - количество элементов, которые нужно вывести
// После вывода массива она также производит переход на новую строку
procedure outputArr(a: arr; n: integer);
var i: integer; // переменная для цикла
begin
    for i := 1 to n do
    begin
      // Если выводим не первый элемент, разделим его с предыдущим пробелом
      if i <> 1 then write(' ');
      // Выводим элемент с двумя знаками после запятой
      write(a[i]:0:2);
    end;
    writeln;
end;
// Функция findIndexOfMax предназначеня для поиска индекса максимального
// элемента в массиве
// Параметр а - массив в котором нужно найти максимальный элемент
// Параметр n - количество просматриваемых элементов массива
// Подразумевается, что в массиве есть хотя бы один элемент
function findIndexOfMax(a: arr; n: integer): integer;
var maxInd: integer; // Переменная, которая будет хранить результат
    i: integer; // Переменная для цикла
begin
    maxInd := 1; // Для начала предположим, что максимальный элемент - 1-й
    for i := 1 to n do
    begin
      // Если предыдущее предположение было не верным, и
      // нам встретился элемент больший, чем тот, который
      // хранится под индексом maxInd, то этот просматриваемый
      // элемент будем считать максимальным
      if a[i] > a[maxInd] then maxInd := i;
    end;
    // Так как мы просмотрели все элементы до n,
    // То в maxInd хранится индекс максимального
    // элемента
    findIndexOfMax := maxInd; // Возвращаем maxInd
end;
// Процедура process выполняет основную работу, указанную в задаче
// Параметр а - массив, который хранит элементы первой последовательности
// Параметр  - количество элементов первой последовательности
// Параметр b - массив, который хранит элементы второй последовательности
// Параметр  - количество элементов второй последовательности
// Подразумевается, что эти последовательности - не пустые
procedure process(var a: arr; na: integer;var b: arr; nb: integer);
var maxA, maxB: integer; // переменные для хранения индексов макс-ых элементов
    temp: real; // Временная переменная для обмена
begin
    // Находим индекс максимального элемента первой последовательности 
    maxA := findIndexOfMax(a, na);
    // Находим индекс максимального элемента второй последовательности 
    maxB := findIndexOfMax(b, nb);
    // Меняем их значения местами
    temp := a[maxA];
    a[maxA] := b[maxB];
    b[maxB] := temp;
end;
// Основная программа производит вызов процедур, в необходимой последовательности
begin
    // Считываем первую последовательность
    inputArr(a,na);
    // Считываем вторую последовательность
    inputArr(b,nb);
    
    // Меняем местами максимальные элементы последовательностей
    process(a,na,b,nb);
    
    // Выводим на экран изменённую первую последовательность
    writeln('A:');
    outputArr(a,na);
    
    // Выводим на экран вторую последовательность
    writeln('B:');
    outputArr(b,nb);
end.
0
0 / 0 / 0
Регистрация: 06.11.2017
Сообщений: 5
07.11.2017, 16:18  [ТС] 4
Спасибо всем)
0
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru