Файл: Лабораторная работа 1 формирование и обработка одномерных массивов по дисциплине Информатика.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.10.2023

Просмотров: 75

Скачиваний: 7

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство цифрового развития

Федеральное государственное бюджетное образовательное учреждение

профессионального образования

Сибирский государственный университет телекоммуникаций и информатики
Межрегиональный центр переподготовки специалистов

Лабораторная работа №1

ФОРМИРОВАНИЕ И ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ

по дисциплине

«Информатика»


Выполнила: Заркова Дарья Олеговна

Группа: ИСТ-21

Вариант:17

Проверил: Лебеденко Л.Ф.

Новосибирск, 2023

Оглавление

Лабораторная работа №1 1

Выполнила: Заркова Дарья Олеговна 1

Задание к лабораторной работе 3

Схема алгоритма решения задачи 4

Программа на языке Си 5

Скриншот экрана с результатом выполнения программы 6

Контрольные вопросы 7


Задание к лабораторной работе


Цель работы: Приобретение навыков разработки алгоритмов формирования и обработки одномерного массива. Закрепление понятий базовых структур цикл, разветвление.

В соответствии с вариантом (таблица 1) разработайте алгоритм обработки элементов массива.

Напишите программу на алгоритмическом языке в соответствии со схемой алгоритма.

Проведите тестирование программы в среде программирования.

17

Массив B [20] целых элементов задать датчиком случайных чисел..

Переписать в массив Х нечетные элементы массива В, уменьшенные на 2. Найти сумму элементов массива В.


Схема алгоритма решения задачи






Программа на языке Си


#include

#include

using namespace std;
int main() {

setlocale(LC_ALL, "Russian");

int i, B[20], * X, x_size = 0, sum = 0;

// инициализация генерации случайных чисел

srand(time(0));
// заполнение массива B случайными числами

cout << "Massiv B: ";

for (i = 0; i < 20; i++) {

B[i] = rand() % 100 + 1;

cout << B[i] << " ";

}

// вычисление суммы всех элементов массива B

for (i = 0; i < 20; i++) {

sum += B[i];

}

// вычисление размера массива X

for (i = 0; i < 20; i++) {

if (B[i] % 2 != 0) {

x_size++;

}

}

// выделение памяти под массив X

X = new int[x_size];

// перепись нечетных элементов массива B в массив X

int j = 0;

for (i = 0; i < 20; i++) {

if (B[i] % 2 != 0) {

X[j] = B[i] - 2;

j++;

}

}

// вывод массива X на экран

cout << "\nMassiv X: ";

for (i = 0; i < x_size; i++) {

cout << X[i] << " ";

}

// вывод суммы всех элементов массива B на экран

cout << "\nSumma elementov massiva B: " << sum;

// освобождение памяти, выделенной под массив X

delete[] X;

return 0;

}


Скриншот экрана с результатом выполнения программы








Контрольные вопросы




  1. Какие ограничения накладываются на индексы элементов массивов?

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



  1. Способы описания массивов на языке Си. Понятия размерности массива, описание размерности массивов.



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

Массив характеризуется следующими основными понятиями:

Элемент массива (значение элемента массива) – значение, хранящееся в определенной ячейке памяти, расположенной в пределах массива, а также адрес этой ячейки памяти.

Каждый элемент массива характеризуется тремя величинами:

  • адресом элемента — адресом начальной ячейки памяти, в которой расположен этот элемент;

  • индексом элемента (порядковым номером элемента в массиве);

  • значением элемента.

Адрес массива – адрес начального элемента массива.

Имя массива – идентификатор, используемый для обращения к элементам массива.

Размер массива – количество элементов массива

Размер элемента – количество байт, занимаемых одним элементом массива.

Графически расположение массива в памяти компьютера можно представить в виде непрерывной ленты адресов.

Адрес

n

n+k

n+2k



n+k(q-1)



Значение

A[0]

A[1]

A[2]



A[q-1]



Индекс

0

1

2



q-1



Представленный на рисунке массив содержит q элементов с индексами от 0 до q-1. Каждый элемент занимает в памяти компьютера k байт, причем расположение элементов в памяти последовательное.

Адреса i-го элемента массива имеет значение

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

Длина массива – количество байт, отводимое в памяти для хранения всех элементов массива.

Для определения размера элемента массива может использоваться функция

int sizeof(тип);

Например:

sizeof(char) = 1;

sizeof(int) = 4;

sizeof(float) = 4;

sizeof(double) = 8;



Для объявления массива в языке Си используется следующий синтаксис:

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

inta[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // массив a из 10 целых чисел

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

int b[10] = {0}; // массив b из 10 элементов, инициализированных 0

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

int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

При обращении к элементам массива индекс требуемого элемента указывается в квадратных скобках [].

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

Например:

var A:array[1..40] of real;

B,С: array[5..20] of integer;

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

Например:

В[1], С[15]

Так как массив – это множество элементов одного типа, обработка этих элементов часто осуществляется в циклах. В этом случае обращение к элементам может записываться так:

С[i], B[i+1], где i – параметр цикла.



  1. Задание типов элементов массива. Могут ли элементы массива иметь разный тип?

Каждый элемент массива помечается целым числом или элементом другого порядкового типа, который называется индексом элемента. Массив задается указанием верхней и нижней границ индексов элементов массива (диапазоном индексов) и типом элементов массива. Диапазоном служат разделенные двумя точками (знак “..”) верхняя и нижняя границы массива. Память для статического массива выделяется в процессе компиляции программы, поэтому в качестве границ диапазонов могут выступать либо целые числа, либо константы, определенные в разделе констант, либо составленные из них выражения. Но необходимо помнить, что эти константы должны быть определены до использования. Статический массив не может быть переменной длины!

Допускается вместо диапазона указывать имя перечислимого типа или такого стандартного типа, как boolean или char. Строго говоря, индекс у массива может быть любого порядкового типа с областью изменения, не превышающей 2 Гбайт.

Примеры:

const N=100;

type

color = (white, black, red, blue, green, yellow, brown);

var

a,s,g:array [1 ..N] of integer;{целочисленныеиндексы}

b:array [color] of char;{ индексыперечисляемоготипа}

c:array [char] of color;{ индексысимвольноготипа}

d:array[‘a’..’z’] of real;{ индексысимвольноготипа}

k:array[Boolean] of byte;{ индексылогическоготипа}

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



  1. Как располагаются элементы массива в памяти?



Элементы абстрактного массива в памяти машины физически располагаются последовательно, согласно описанию. При этом каждый элемент занимает в памяти количество байт, соответствующее его размеру. Например, если массив состоит из элементов типа integer, то каждый элемент будет занимать по два байта. А весь массив займет S´2 байта, где S – количество элементов в массиве.

Сколько места займет массив, состоящий из массивов, т.е. матрица? Очевидно: Si´Sj, где Si - количество строк, а Sj – количество элементов в каждой строке.



  1. Чем отличаются алгоритмы поиска максимального и минимального элемента массива?



Алгоритм поиска минимального (максимального) элемента в неупорядоченном массиве довольно очевиден: делается предположение, что первый элемент массива является минимальным (максимальным), затем остальные элементы массива последовательно сравниваются с этим элементом. Если во время очередной проверки обнаруживается, что проверяемый элемент меньше (больше) принятого за минимальный (максимальный), то этот элемент принимается за минимальный (максимальный) и продолжается проверка оставшихся элементов.

  1. Чем отличаются алгоритмы расчета суммы и подсчета числа элементов массива?

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

Пусть а[] – заданный массив из n элементов. Сумма всех его элементов в математической форме выглядит следующим образом:



Для вычисления суммы элементов части массива, например, с in–го до ik–го. Следует использовать формулу:



Формула получается из формулы выше при in=0 и ik=n–1.

Алгоритм вычисления суммы состоит в следующем:

  1. установить значение переменой для накопления суммы (s) в нулевое значение (s=0);

  2. в цикле изменяя i от in до ik вычислить сумму элементов массива по выражению .



При первой итерации цикла получим . На второй и т. д. На последней итерации цикла будем иметь . Т.е. в цикле по параметру i «старое» значение s, содержащее накопленную сумму на предыдущей итерации, изменяется на значение .

Блок-схема:



Фрагмент программы:

*/вычисление суммы элементов массива с in по ik

s=0;

for(i=in;i
s=s+a[i]; // или s+=a[i]; или s+=*(a+i);

*/вычисление суммы всех элементов массива

s=0;

for(i=0;i
s+=a[i];

Подсчет числа элементов массива, удовлетворяющих заданному условию, производится по алгоритмам, аналогичным вычислению суммы. Отличие заключается в том, что вместо добавления элемента массива к сумме, переменная - счетчик (k) увеличивается на единицу (k=k+1). Таким образом, если в графической схеме алгоритма расчета суммы, вместо s=0 и s=s+ai записать k=0 и k=k+1, то получим алгоритмы подсчета количества элементов массива.

Блок-схема:



Фрагмент программы:

/* с помощью цикла for */

k=0;

for(i=1;i
if(a[i]==b ) k++; // или k=k+1;

/* с помощью цикла while */

k=0; i=1;

while (i