Remkomplekty.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Произведение элементов массива паскаль

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Pascal: Занятие № 5. Одномерные массивы в Паскале

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

Объявление массива

Массивы в Паскале используются двух типов: одномерные и двумерные.
Определение одномерного массива в Паскале звучит так: одномерный массив — это определенное количество элементов, относящихся к одному и тому же типу данных, которые имеют одно имя, и каждый элемент имеет свой индекс — порядковый номер.
Описание массива в Паскале (объявление) и обращение к его элементам происходит следующим образом:

var dlina: array [1..3] of integer; begin dlina[1]:=500; dlina[2]:=400; dlina[3]:=150; .

Объявить размер можно через константу:

Инициализация массива

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

const a:array[1..4] of integer = (1, 3, 2, 5);

Заполнение последовательными числами:

Ввод с клавиатуры:

writeln (‘введите кол-во элементов: ‘); readln(n); <если кол-во заранее не известно, - запрашиваем его>for i := 1 to n do begin write(‘a[‘, i, ‘]=’); read(a[i]); . end; .


✍ Пример результата:

Вывод элементов массива

var a: array[1..5] of integer; <массив из пяти элементов>i: integer; begin a[1]:=2; a[2]:=4; a[3]:=8; a[4]:=6; a[5]:=3; writeln(‘Массив A:’); for i := 1 to 5 do write(a[i]:2); <вывод элементов массива>end.

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

Функция Random в Pascal

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

var f: array[1..10] of integer; i:integer; begin randomize; for i:=1 to 10 do begin f[i]:=random(10); < интервал [0,9] >write(f[i],’ ‘); end; end.

Для вещественных чисел в интервале [0,1):

var x: real; . x := random;

Числа Фибоначчи в Паскале

Наиболее распространенным примером работы с массивом является вывод ряда чисел Фибоначчи в Паскаль. Рассмотрим его.

Получили формулу элементов ряда.

var i:integer; f:array[0..19]of integer; begin f[0]:=1; f[1]:=1; for i:=2 to 19 do begin f[i]:=f[i-1]+f[i-2]; writeln(f[i]) end; end.

На данном примере, становится понятен принцип работы с числовыми рядами. Обычно, для вывода числового ряда находится формула определения каждого элемента данного ряда. Так, в случае с числами Фибоначчи, эта формула-правило выглядит как f[i]:=f[i-1]+f[i-2] . Поэтому ее необходимо использовать в цикле for при формировании элементов массива.

Максимальный (минимальный) элемент массива

Псевдокод:

Поиск максимального элемента по его индексу:

Пример:

Поиск в массиве

Рассмотрим сложный пример работы с одномерными массивами:

var f: array[1..10] of integer; flag:boolean; i,c:integer; begin randomize; for i:=1 to 10 do begin f[i]:=random(10); write(f[i],’ ‘); end; flag:=false; writeln(‘введите образец’); readln(c); for i:=1 to 10 do if f[i]=c then begin writeln(‘найден’); flag:=true; break; end; if flag=false then writeln(‘не найден’); end.

Рассмотрим эффективное решение:

Задача: найти в массиве элемент, равный X , или установить, что его нет.

Алгоритм:

  • начать с 1-го элемента ( i:=1 );
  • если очередной элемент ( A[i] ) равен X , то закончить поиск иначе перейти к следующему элементу.

решение на Паскале Вариант 2. Цикл While:

Поиск элемента в массиве

Предлагаем посмотреть подробный видео разбор поиска элемента в массиве (эффективный алгоритм):

Пример:

Циклический сдвиг

Программа:

Перестановка элементов в массиве

Рассмотрим, как происходит перестановка или реверс массива.

Решение:

Псевдокод:

Программа:

Выбор элементов и сохранение в другой массив

Решение:


Вывод массива B:

writeln(‘Выбранные элементы’); for i:=1 to count-1 do write(B[i], ‘ ‘)

Сортировка элементов массива

  • В таком типе сортировок массив представляется в виде воды, маленькие элементы — пузырьки в воде, которые всплывают наверх (самые легкие).
  • При первой итерации цикла элементы массива попарно сравниваются между собой:предпоследний с последним, пред предпоследний с предпоследним и т.д. Если предшествующий элемент оказывается больше последующего, то производится их обмен.
  • При второй итерации цикла нет надобности сравнивать последний элемент с предпоследним. Последний элемент уже стоит на своем месте, он самый большой. Значит, число сравнений будет на одно меньше. То же самое касается каждой последующей итерации.

Выполнение на Паскале:

for i:=1 to N-1 do begin for j:=N-1 downto i do if A[j] > A[j+1] then begin с := A[j]; A[j] := A[j+1]; A[j+1] := с; end; end;

  • в массиве ищется минимальный элемент и ставится на первое место (меняется местами с A[1]);
  • среди оставшихся элементов также производится поиск минимального, который ставится на второе место (меняется местами с A[2]) и т.д.

Выполнение на Паскале:

for i := 1 to N-1 do begin min:= i ; for j:= i+1 to N do if A[j] i then begin c:=A[i]; A[i]:=A[min]; A[min]:=c; end; end;

    Выбирается и запоминается средний элемент массива (присвоим X):

  • Инициализируем две переменные (будущие индексы массива): L:=1, R:=N (N — количество элементов).
  • Увеличиваем L и ищем первый элемент A[L], который больше либо равен X (в итоге он должен находиться справа).
  • Уменьшаем R и ищем элемент A[R], который меньше либо равен X (в итоге он должен находиться слева).
  • Смотрим, если L X do R:= R — 1; if L

    Читать еще:  Номер максимального элемента массива паскаль
    5 комментариев

    Bronislav

    См. пузырьковая сортировка.
    При второй итерации цикла (согласно вашим рисункам и коду ) нет надобности сравнивать первый элемент со вторым. Снова вы всех путаете =)

    admin

    Именно поэтому в коде : for j:=N-1 downto i do

    downto i — то есть мы доходим сначала до первого элемента, потом до второго и т.д.

    Bronislav

    Смотрите. Ваш код работает. Но работает не так, как вы пишете перед этим. Он просеивает минимальный элемент с конца через весь массив до первой позиции (первого индекса если хотите). А не так как вы пишете: «При второй итерации цикла нет надобности сравнивать последний элемент с предпоследним. Последний элемент уже стоит на своем месте, он самый большой.» Соответственно вашему коду и вашим рисункам на второй итерации не сравнивается первый элемент (минимальный) со вторым, а не последний (который вообще не факт что максимальный) с предпоследним. Вот об чем речь. Или код меняйте или описание алгоритма перед кодом.

    Владимир

    А как насчёт странного способа поменки оандомням образом, конечно это долго , но все таки есть
    Var
    A: array[1..10] of integer;
    I,e,r,r1: integer;
    Begin
    While i

    Найти произведение элементов целочисленного одномерного массива с четными номерами, состоящего из n элементов. Элементы вводятся с клавиатуры.

    Типовые задачи на Паскале (массивы)

    Массив— это упорядоченный набор однотипных элементов, обозначаемых одним именем; доступ к элементу массива осуществляется по его номеру.

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

    В программе для каждого массива должны быть указаны его параметры: имя, размерность и размер. Бывают одномерные, двумерные и т.д. массивы. Это называется размерностью.

    Одномерные массивы (последовательности).

    I — номер элемента, A[I] — элемент массива, стоящий на I-ом месте

    1. Сформировать и вывести на экран последовательность из n элементов, заданных датчиком случайных чисел на интервале [-23, 34].

    Var a: array[1..100] of integer;

    Write (‘Сколько элементов? ’); Readln (n);

    Найти произведение элементов одномерного массива, состоящего из n элементов. Элементы вводятся с клавиатуры.

    Var a: array[1..100] of integer;

    Write (‘Сколько элементов? ’); Readln (n);

    write (‘введите число’); readln (a[i]);

    writeln(‘произведение элементов равно: ‘,p);

    Найти сумму элементов одномерного массива. Размер произвольный. Элементы вводятся с клавиатуры.

    Var a: array[1..100] of real;

    Write (‘n=’); Readln (n);

    write (‘введите число’); readln (a[i]);

    writeln(‘сумма элементов равна ‘,s);

    Задан массив А, состоящий из n чисел. Найти среднее арифметическое его элементов. Элементы вводятся с клавиатуры.

    Var a: array[1..100] of real;

    Write (‘n=’); Readln (n);

    write (‘введите число’); readln (a[i]);

    writeln(‘среднее арифметическое элементов: ‘,s);

    Найти сумму элементов массива с четными номерами, содержащего N элементов. Элементы вводятся с клавиатуры.

    Var a: array[1..100] of real;

    Write (‘n=’); Readln (n);

    write (‘введите число’); readln (a[i]);

    if i mod 2 = 0 then s:=s+a[i];

    writeln(‘сумма элементов с четными номерами: ‘,s);

    6. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-19, 26] (размер произвольный). Найти произведение элементов с нечетными номерами.

    Var a: array[1..100] of integer;

    Write (‘Сколько элементов? ’); Readln (n);

    if i mod 2 <> 0 then P=P*a[i];

    Writeln(‘Произведение элементов с нечетными номерами:’, P);

    7. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-56, 47] (размер произвольный). Найти произведение элементов с четными номерами, которые превосходят некоторое число t.

    Var a: array[1..100] of integer;

    i, n, p, t: integer;

    Write (‘Сколько элементов? ’); Readln (n);

    a[i]:= Random(104)-56; writeln (a[i],’ ‘);

    if (i mod 2 = 0) and (a[i]>t) then P=P*a[i];

    Writeln(‘Произведение элементов с четными номерами, превосходящие число t:’, P);

    Найти наименьший элемент одномерного массива, состоящего из n элементов. Элементы вводятся с клавиатуры.

    Var a: array[1..100] of real;

    Write (‘n=’); Readln (n);

    begin S=S+a[i]; K=K+1; end;

    Writeln(‘среднее арифметическое чисел, превосходящих ‘,C,’ равно ‘,sred);

    Найти произведение элементов целочисленного одномерного массива с четными номерами, состоящего из n элементов. Элементы вводятся с клавиатуры.

    Var a: array [1..100] of integer;

    write (‘n=’); readln (n);

    if i mod 2=0 then p:=p*a[i];

    Writeln (‘произведение элементов массива с четными номерами равно ‘,p);

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

    1)Ввести с клавиатуры массив из 5 элементов. Найти среднее арифметическое всех элементов массива.

    2)Ввести с клавиатуры массив из 5 элементов. Найти наименьший из них.

    program z2;
    const n=5;
    var a:array [1..n] of integer;
    min,i:integer;
    begin
    for i:=1 to n do
    begin
    write(‘a[‘,i,’]=’);
    read(a[i]);
    end;
    min:=a[i];
    for i:=1 to n do
    if a[i] 0 then
    k:=k+1;
    writeln(‘k =’,k);
    readln
    end.

    5)Ввести с клавиатуры массив из 5 элементов. Найти сумму четных элементов.

    program z5;
    const n=5;
    var a:array [1..n] of integer;
    s,i:integer;
    begin
    for i:=1 to n do
    begin
    write(‘a[‘,i,’]=’);
    read(a[i]);
    end;
    s:=0;
    for i:=1 to n do
    if a[i] mod 2=0 then
    s:=s+a[i];
    writeln(‘s =’,s);
    readln
    end.

    6)Ввести с клавиатуры массив из 5 элементов. Найти сумму элементов стоящих на четных местах.

    Читать еще:  Вывод в консоль паскаль abc

    program z6;
    const n=5;
    var a:array [1..n] of integer;
    s,i:integer;
    begin
    for i:=1 to n do
    begin
    write(‘a[‘,i,’]=’);
    read(a[i]);
    end;
    s:=0;
    for i:=1 to n do
    if i mod 2=0 then
    s:=s+a[i];
    writeln(‘s =’,s);
    readln
    end.

    7) Дан одномерный массив чисел. Измените знаки всех его элементов на противоположные.

    program z7;
    const n=10;
    var a:array [1..n] of integer;
    i:integer;
    begin
    writeln(‘исходный массив:’);
    for i:=1 to n do
    begin
    a[i]:=random(100);
    writeln(‘a[‘,i,’]= ‘,a[i]);
    end;
    writeln;
    writeln(‘новый массив:’);
    for i:=1 to n do
    begin
    a[i]:=-1*a[i];
    writeln(‘a(‘,i,’)= ‘, a[i]);
    end;

    8) Удалить первый отрицательный элемент, если таковой имеется.

    program z8;
    const n=10;
    var a:array [1..n] of integer;
    i,k,ki:integer;
    begin
    k:=0;
    writeln(‘исходный массив:’);
    for i:=1 to n do
    begin
    a[i]:=random(100)-90;
    write(‘a[‘,i,’]= ‘,a[i],’ ‘);
    end;
    for i:=1 to n do
    if (k=0) and (a[i] b[i] then c[i]:= a[i] else c[i]:=b[i];
    writeln(‘c[‘,i,’]= ‘,c[i]);
    end;

    11) В заданной последовательности все элементы, не равные нулю, расположить сохраняя их порядок следования, в начале последовательности, а нулевые элементы — в конце последовательности.

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

    program z13;
    uses crt;
    const n=12;
    var a:array [1..n] of integer;
    i,k,p,x:integer;
    begin
    k:=0;p:=-1;
    writeln(‘исходный массив:’);
    for i:=1 to n do
    begin
    write(‘a[‘,i,’]= ‘);read(a[i]);
    end;
    for i:=1 to n do
    if (k=0) and (a[i] 0) then p:=i;
    writeln(‘первый отрицательный элемент= ‘, a[k]);
    writeln(‘первый положительный элемент= ‘, a[p]);
    writeln(‘массив после выполнения программы :’ );
    x:=a[k];
    a[k]:=a[p];
    a[p]:=x;
    for i:=1 to n do
    write(‘a[‘,i,’]= ‘,a[i],’ ‘);
    end.

    14. В одномерном массиве произвольных чисел А(10) положительные элементы уменьшить в двое, а отрицательные элементы заменить на значения их индексов.

    const n=10;
    var a:array[1..n] of real;
    i,k:integer;
    begin
    for i:=1 to n do
    begin
    write(‘a[‘,i,’]= ‘);readln(a[i])
    end;
    for i:=1 to n do
    begin
    if a[i]>0 then a[i]:=a[i]/2;
    if a[i] 0 then k:=k+1;
    if k=5 then writeln(‘«УСЛОВИЕ ВЫПОЛНЯЕТСЯ»’)
    else writeln(‘«УСЛОВИЕ НЕ ВЫПОЛНЯЕТСЯ»’)
    end.

    16.Организовать в диалоге ввод элементов целочисленного массива А размерностью N. Вычислить среднее арифметическое из четных элементов массива А. Посчитать количество положительных нечетных элементов массива. Вывести на экран монитора массив и результаты вычислений.

    uses crt;
    var a:array[1..1000] of integer;
    i,p,k,n,s:integer;
    sa:real;
    begin
    write(‘Введите n= ‘);readln(n);
    for i:=1 to n do
    begin
    write(‘a[‘,i,’]= ‘);readln(a[i])
    end;
    for i:=1 to n do
    if (a[i] mod 2=0) then
    begin
    s:=s+a[i];k:=k+1;
    end;
    sa:=s/k;
    for i:=1 to n do
    if (a[i]>0) and (a[i] mod 2 <>0) then p:=p+1;
    writeln(‘среднее арифметическое из четных элементов массива А: ‘,sa);
    writeln(‘количество положительных нечетных элементов массива: ‘,p);
    end.

    Урок 14. Одномерные массивы. Работа с элементами

    Сегодня мы с вами наконец-то начинаем новую тему — одномерные массивы .

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

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

    Между именем типа и именем переменной ставится знак «двоеточие». Array — служебное слово (в переводе с английского означает «массив», «набор»); [1..N] — в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива; of — служебное слово (в переводе с английского «из»); integer — тип элементов массива.

    Индексом могут быть не только натуральные числа: мы можем написать так: [0..10], [-29..45], [‘a’..’z’], [false..true] — то есть нам подходят любые символы и числа — главное соблюсти следующее условие: левая часть меньше правой. Для того чтобы определить, что меньше — восклицательный знак(‘!’) или точка(‘.’) используем таблицу ASCII и функции Ord() и Chr().

    Как же производится ввод одномерного массива?

    Для того чтобы ввести или вывести значения элементов такого массива, используем цикл с параметром(или с постусловием, или с предусловием — в общем, любой цикл. ).

    Как видите, ничего страшного в массивах нет. Массивы применяют в тех случаях, когда нельзя обойтись одной-двумя переменными (примеры таких задач мы рассматривали в решении задач из блока Series). В случаях, когда после ввода последовательности целиком пользователю необходимо обратиться к переменным в середине последовательности, в начале, поменять их значения местами, отсортировать.

    Раз уж мы затронули тему задач из блока Series, давайте решим пару задачек оттуда с помощью массивов, а не тем увечным способом, которым нам приходилось пользоваться.

    Одномерные массивы. Решение задач.

    Series8. Дано целое число N и набор из N целых чисел. Вывести в том же порядке все четные числа из данного набора и количество K таких чисел.

    Series28. Дано целое число N и набор из N вещественных чисел: A1, A2, …, AN. Вывести следующие числа:

    Исходное решение: Series28.

    Более подробно про возведение числа в степень мы говорили в решении задачи for36.

    Ну и напоследок давайте разберём веселенькую задачу на длинную арифметику.

    Задача. Найти факториал числа.

    Мы уже решали эту задачу здесь(for19).

    Научимся вычислять факториал натурального числа N. Факториал числа — это произведение чисел 1*2*3*…*(N-1 )*N (обозначается как N!). Сложность задачи в том, что уже 8!=40320, а 13!=6227020800. Типы данных Integer, Longlnt применимы весьма в ограниченном диапазоне натуральных чисел. Для представления факториала договоримся использовать массив. Пример:

    Читать еще:  Ввод в си шарп

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

    Содержание

    1. Массивы в Паскале
    2. Заполнение массива данными
    3. Действия с массивами
    4. Определение суммы элементов массива
    5. Поиск элемента массива
    6. Сортировка массива
    7. Что мы узнали?

    Бонус

    • Тест по теме

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

    Кроме простых типов данных в языке программирования Паскаль есть несколько сложных, одним из которых является регулярный тип. Структура, описываемая таким типом, называется массивом.

    Массивы в Паскале представляют именованную собой совокупность элементов одного типа, ранжированных по возрастанию их индексов.

    Рис. 1. Одномерный массив.

    Объявление массива выполняется с помощью ключевого слова ARRAY с указанием размерности массива и типа его элементов.

    Например, массив в разделе описания переменных можно задать так:

    Var Mass: array[1..10] of integer;

    Доступ к элементу в массиве осуществляется через указание индекса. Например, число 10 в массиве Mass имеет порядковый номер 6. Обращаться к конкретной ячейке следует по имени массива, указывая в квадратных скобках номер индекса, например, Mass [6].

    Рис. 2. Двумерный массив.

    Массивы могут быть как одномерными, так и многомерными. Двумерный массив выглядит в виде таблицы, трехмерный массив с виду похож на кубик Рубика.

    Рис. 3. Трехмерный массив.

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

    Заполнить пустой массив данными можно следующими способами:

    • В тексте программы присвоить ячейкам числа.
    • Организовать ввод с клавиатуры.
    • Воспользоваться процедурой генерации случайных чисел.

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

    Заполнение массива Mass (10) случайными числами можно программное реализовать так:

    program Massiv ;
    var i: integer; Mass: array[1..10] of integer;

    begin
    for i:=1 to 10 do Mass [i]:=random(100);

    Чтобы увидеть на экране сгенерированный массив, можно дополнительно в основную часть программы добавить процедуру вывода элементов массива на экран:

    for i:=1 to 10 do write (Mass [i],` `);

    Как видно из примера, для организации перебора индексов массива, используется циклическая конструкция оператора повтора с заданным числом повторений FOR .. TO.. DO.

    Действия с массивами

    Работа с массивами данных основывается на решении таких типовых задач, как:

    • Определение суммы или произведения элементов массива.
    • Поиск элемента в соответствии с определенным критерием.
    • Сортировка массива.

    Рассмотрим примеры программ обработки массивов

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

    Расчет суммы элементов массива выполняется за счёт последовательного добавления слагаемых. Для этого следует задать некоторую переменную, в которой будет сохраняться результат сложения. Для каждого элемента массива его значение складывается с текущим значением переменной-аккумулятора и снова сохраняется в этой переменной. Аналогично вычисляется и произведение.

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

    Программно определение суммы можно записать так:

    var summ, i: integer; Mass: array[1..10] of integer;

    for i:=1 to 10 do Mass[i]:=random(100);

    for i:=1 to 10 do write (Mass[i],` `);

    for i:=1 to 10 do summ:=summ+Mass[i];

    writeln (‘Сумма элементов массива десяти целых чисел равна ‘, summ)

    Поиск элемента массива

    В программируемых задачах обычно ищут наибольшее или наименьшее число, или число равное заданному.

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

    Программа для поиска элемента в массиве может выглядеть так:

    var x, i, k: integer; Mass: array[1..10] of integer;

    write(‘Введите некоторое целое число k = ‘);

    for i:=1 to 10 do Mass[i]:=random(100);

    for i:=1 to 10 do write (Mass[i],` `);

    for i:=1 to 10 do

    if Mass[i]=k then n:=i;

    if n=0 then write(‘В массиве нет числа, равного заданному’) else write (‘Порядковый номер искомого числа равен’,i)

    Сортировка массива

    Сортировка массива заключается в упорядочении элементов массива по возрастанию или убыванию. Существуют разные способы сортировок элементов массива.

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

    Что мы узнали?

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

  • Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector
    ×
    ×