Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до лабораторної роботи № 4
«Математичні функції та управляючі конструкції»
Варіант 16
Дата «12» листопада 2021
Завдання:1. Створити одновимірний та двовимірний масиви.2. Виконати початкову ініціалізацію всіх елементів масиву.3. Виконати маніпуляції з елементами масивів.У якості індивідуального завдання необхідно написати програму, в якій, на першому етапі, користувачем задається вимірність та розмірність масиву та спосіб ініціалізації (з клавіатури/консолі або випадковими числами) елементів масиву. На другому етапі необхідно скористатися варіантом індивідуального завдання з Додатку В-4.
Теоритичні відомості:
Массив это совокупность переменных одного типа, к которым обращаются с помощью общего имени. Доступ к отдельному элементу массива может осуществляться с помощью индекса. В С все массивы состоят из соприкасающихся участков памяти. Наименьший адрес соответствует первому элементу. Наибольший адрес соответствует последнему элементу. Массивы могут иметь одну или несколько размерностей.
Одномерный массив
Стандартный вид объявления одномерного массива следующий:тип имя_переменной [размер];
В С массивы должны определяться однозначно, чтобы компилятор мог выделить для них место в памяти. Здесь тип объявляет базовый тип массива и является типом каждого элемента массива. Параметр размер определяет, сколько элементов содержит массив. В одномерном массиве полный размер массива в байтах вычисляется следующим образом:общее число байт = sizeof (базовый тип) *число элементов
У всех массивов первый элемент имеет индекс 0. Поэтому, если написать char р [10]; то будет объявлен массив символов из 10 элементов, причем эти элементы адресуются индексом от 0 до 9. Следующая программа загружает целочисленный массив числами от 0 до 9 и выводит его:#include <stdio.h>int main(void){int x[10]; /* резервирует место для 10 целочисленных элементов */int t;for(t=0; t<10; ++t) x[t] = t;for(t=0; t<10; ++t) printf("%d ", x[t]);return 0;}
Двумерные массивы
С позволяет создавать многомерные массивы. Простейшим видом многомерного массива является двумерный массив. Двумерный массив - это массив одномерных массивов. Двумерный массив объявляется следующим образом:тип имя_массива[размер второго измерения][размер первого измерения];Следовательно, для объявления двумерного массива целых с размером 10 на 20 следует написать: int d[10] [20] ;Посмотрим внимательно на это объявление. В противоположность другим компьютерным языкам, где размерности массива отделяются запятой, С помещает каждую размерность в отдельные скобки.
Для доступа к элементу с индексами 3, 5 массива d следует использовать d[3] [5]
В следующем примере в двумерный массив заносятся числа от 1 до 12, после чего массив выводится на экран.
#include <stdio.h>int main(void){int t,i, num[3][4];/* загрузка чисел */for(t=0; t<3; ++t)for (i=0; i<4; ++i)num[t][i] = (t*4)+i+1;/* вывод чисел */for (t=0; t<3; ++t){for (i=0; i<4; ++i)printf("%d ",num[t][i]);printf ("\n");}return 0;}
Варіант індивідуального завдання
/
Блок-схеми
/
Блок-схема першого завдання:
/
Блок-схема другого завдання:
/
Вивід програми:/ / /
Код програми:
Посилання на Repl.it:
https:/replit.com/join/ihkuurqznc-tr-15khavkin
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int c = 0;
int main(int args, char *argv[]) {
int x,y,s;
int array1[10];
int array2[5][5];
srand(time(NULL));
//Ініціалізація одновимірного массиву
printf("\nВиберіть спосіб ініціалізації елементів для одновимірного масиву\n1 - з клавіатури/консолі\n2 - випадковими числами\nвведіть 1 або 2: ");
scanf("%d", &x);
switch(x){
case 1:
printf("\nВвод зміних за допомогою консолі:\n");
for (int i=0; i < 10; i++){
printf("Введіть значення елементу array1[%d]: ", i);
scanf("%d", &array1[i]);
}
break;
case 2:
printf("\nВвод зміних випадковими числами:\n");
for (int i=0; i < 10; i++){
array1[i]= rand() % 40 - 20;
printf("\narray1[%d]: %d", i, array1[i]);
if(array1[i]<0) c++;
}
break;
default:
printf("\nВи ввели відмінне від 1 або 2 значення\nЗавдання 1 та ініціалізація одновимірного массиву будут неправильним");
break;
}
//Ініціалізація двовимірного массиву
printf("\n\nВиберіть спосіб ініціалізації елементів для двовимірного масиву\n1 - з клавіатури/консолі\n2 - випадковими числами\nвведіть 1 або 2: ");
scanf("%d", &x);
switch(x){
case 1:
printf("\nВвод зміних за допомогою консолі:\n");
for (int i = 0; i < 5; i++ ) {
for (int j = 0; j < 5; j++ ){
printf("Введіть значення елементу array2[%d,%d]: ", i, j);
scanf("%d", &array2[i][j]);
}
}
break;
case 2:
printf("\nВвод зміних випадковими числами:\n");
for (int i = 0; i < 5; i++ ) {
for (int j = 0; j < 5; j++ ){
array2[i][j]= rand() % 40 - 20;
printf("array2[%d,%d]: %d ", i, j, array2[i][j]);
}
printf("\n");
}
break;
default:
printf("\nВи ввели відмінне від 1 або 2 значення\nЗавдання 2 та ініціалізація двовимірного массиву будут неправильним");
break;
}
//Перше завдання
int n = 10-c;
int parray1[n];
printf("\nЗавданя 1 для одновимернго массиву\nОтриманний массив array1:\n");
for (int j=0, i=0; i < 10; i++){
printf("%d ", array1[i]);
if(array1[i]>=0){
parray1[j]=array1[i];
j++;
}
}
printf("\n\nОтриманний массив parray1:\n");
for (int i=0; i < n; i++){
printf("%d ", parray1[i]);
}
//Друге завдання
int N,K,a,b;
int num=0;
int parray2[10][5];
printf("\n\nЗавданя 2 для двовимернго массиву");
printf("\nВведіть значення N: ");
scanf("%d", &N);
printf("\nВведіть значення K: ");
scanf("%d", &K);
printf("\nОтриманний массив array2:\n");
for (int i = 0; i < 5; i++ ) {
for (int j = 0; j < 5; j++ ){
printf("%d ",array2[i][j]);
parray2[i][j]=array2[i][j];
}
printf("\n");
}
printf("\nОтриманний массив parray2:\n");
int N2=N;
int K2=K;
int zalysh=25-N;
//Переписування массиву до елементу[N]
for (int i = 0; i<10 ; i++ ) {
for (int j = 0; j<5; j++ ){
if(N2>=0){
printf("%d ",parray2[i][j]);
N2-=1;
a=i;
b=j;
}
//Додавання до массиву К елементів
if(N2==-1 && K2>0){
printf("%d ", x = rand() % 40 - 20);
K2-=1;
}
}
if(N2!=-1 && K2!=-1)printf("\n");
}
//Переписування массиву до кінця
for (int i = a; i<10 ; i++ ) {
for (int j = b+1; j<5; j++ ){
if(zalysh>=0){
printf("%d ",parray2[i][j]);
zalysh-=1;
a=0;
b=-1;
}
}
if(zalysh!=-1)printf("\n");
}
return 0;
}
Висновок:
У цій лабораторної роботі були створені та ініцалізовані одновимірний та двовимірний масиви. Ініціалізація була виконана за допомогою вводу з командної строки або присвоєнням випадковими числами. Зроблені манціпулації з масивами згідно до варіанту 16 з Додатку. Виведені результуючі масиви. Створенні блок-схеми до коду. Зроблено звіт з лабораторної роботи та вчасно надіслано викладачу на перевірку.