Задание 7 Урок 15
Primary tabs
Задание 7 Урок 15
Заполните массив целых чисел (длиной 8 элементов) случайными значениями от -5 до 5.
Сохраните все неотрицательные числа первого массива во второй массив
и выведете этот второй массив на экран (если количество сохраненных чисел во втором массиве меньше, чем его длина, то выведете только их, не обходя неинициализированные яйчейки).
program Project1;
type
type_for_the_array = array[0..7] of integer;
var counter_array,min,max,high_of_the_array: integer;
first_array: type_for_the_array;
procedure print_array(copyArray: type_for_the_array; highOfTheArray: integer);
var auxiliary_array: array[0..7] of integer;// второй массив
counter_auxiliary_array, counter_first_array: integer;
begin
counter_auxiliary_array := 0;
for counter_first_array := low(copyArray) to high(copyArray) do
if copyArray[counter_first_array] > 0 then
begin
auxiliary_array[counter_auxiliary_array]:=copyArray[counter_first_array];
counter_auxiliary_array += 1;
end;
for counter_auxiliary_array :=low(auxiliary_array) to highOfTheArray do
writeln(auxiliary_array[counter_auxiliary_array]);
end;
begin
high_of_the_array := 0;
min := -5;
max := 5;
randomize;
for counter_array := low(first_array) to high(first_array) do
begin
first_array[counter_array] := min + random(max - min + 1);
if first_array[counter_array] > 0 then
high_of_the_array += 1;
end;
print_array(first_array,high_of_the_array);
readln();
end. 2 3 3 2 2 0
- Log in to post comments
- 2742 reads
vedro-compota
Sun, 11/22/2020 - 17:40
Permalink
добавить полные распечатки
добавить полные распечатки массивов
_____________
матфак вгу и остальная классика =)
Dobrii_kot
Tue, 11/24/2020 - 16:13
Permalink
Исправлено
При объявлении массива либо же переменной в процедуре могут появляться следующие значения:
copyArray: Длина=8: { 0, 0, 38394, 1, 0, 0, 0, 0}При использовании переменной counter_auxiliary_array без инициализации ячейка 0 (ноль)
второго массива auxiliary_array остаётся неинициализированной.
В результате, при выведении массива, значение этой ячейки может быть равно 0 (нулю) или же рандомному значению подобному значению из окна отладки указанному выше.
Также подобные значения проявляются и в конечном значении массива при неверном использовании переменной-счетчика. Т.к. конечное значение этой переменной на +1 выше номера ячейки массива:
auxiliary_array[counter_auxiliary_array]:=copyArray[counter_first_array]; counter_auxiliary_array += 1;Сначала инициализируется ячейка с текущим значением счетчика, а за тем значение счетчика увеличивается на 1.
Далее следуют два исправленных варианта кода
с процедурой
type type_for_the_array = array[0..7] of integer; var i,min,max: integer; first_array: type_for_the_array; procedure print_array(copyArray: type_for_the_array);{copyArray - имеется в виду копия первого массива} var g, i: integer; auxiliary_array: type_for_the_array;// второй массив begin g := 0;// счетчик второго массива for i := low(copyArray) to high(copyArray) do if copyArray[i] > 0 then // обход первого массива для инициализации второго begin auxiliary_array[g]:=copyArray[i];// инициализация второго массива g += 1; end; write('Второй массив: ');// вывод второго массива for i :=low(auxiliary_array) to (g-1) do write(auxiliary_array[i], ' '); end; begin min := -5; max := 5; randomize; for i := low(first_array) to high(first_array) do begin first_array[i] := min + random(max - min + 1);{обход первого массива и инициализация его рандомными значениями} end; write('Первый массив:');// вывод первого массива for i := low(first_array) to high(first_array) do write(first_array[i], ' '); writeln(); print_array(first_array);// вывод второго массива через процедуру readln(); end.без процедуры
type type_for_the_array = array[0..7] of integer; var i,min,max,high_of_the_array: integer; first_array,second_array: type_for_the_array; begin high_of_the_array := 0;// номер последней заполненной ячейки массива 2 min := -5;// мин. значение рандома max := 5;// макс значение рандома randomize; for i := low(first_array) to high(first_array) do begin first_array[i] := min + random(max - min + 1);// обход и инициализация м1 if first_array[i] > 0 then begin second_array[high_of_the_array] := first_array[i];// инициал. м2 high_of_the_array += 1;// счетчик второго массива end end; writeln('Первый массив: ');// вывод первого массива for i := low(first_array) to high(first_array) do write(first_array[i], ' '); writeln(); if high_of_the_array = 0 then write('Значения всех ячеек первого массива отрицательные!!!'){проверка первого массива на наличие положительных значений} else begin writeln('Второй массив: '); for i := low(second_array) to (high_of_the_array-1) do{вывод второго масс} write(second_array[i], ' '); end; readln(); end.vedro-compota
Sun, 12/20/2020 - 17:02
Permalink
решение засчитано
решение засчитано
_____________
матфак вгу и остальная классика =)