Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Алгоритмізація та програмування 1: Базові концепції програмування
ЗВІТ
до лабораторної роботи № 4
«Математичні функції та управляючі конструкції»
Варіант 7
Дата «06» листопада 2021
Завдання:
1. Створити одновимірний та двовимірний масиви.2. Виконати початкову ініціалізацію всіх елементів масиву.3. Виконати маніпуляції з елементами масивів.У якості індивідуального завдання необхідно написати програму, в якій, на першому етапі, користувачем задається вимірність та розмірність масиву та спосіб ініціалізації (з клавіатури/консолі або випадковими числами) елементів масиву. На другому етапі необхідно скористатися варіантом індивідуального завдання з Додатку В-4.
/
Мета: навчитися працювати с одновимірними та двовимірними масивами, робити з ним деякі операції.
Теоретичні відомості
Масив - це структура даних, представлена у вигляді групи осередків одного типу, об'єднаних під одним єдиним ім'ям. Масиви використовуються для обробки великої кількості однотипних даних. Окремий осередок даних масиву називається елементом масиву. Елементами масиву можуть бути дані будь-якого типу.
Залежно від кількості вимірів масиви діляться на одновимірні масиви, двовимірні масиви, тривимірні масиви і так далі до n-мірного масиву. Найчастіше в програмуванні використовуються одномірні і двовимірні масиви, тому ми розглянемо тільки ці масиви.
Вигляд одновимірного та двовимірного масивів:/
/
Короткий опис рішення програми:
Спочатку завдяки оператору вибору if було реалізовано вибір вимірності масиву. 1 – одновимірного, 2 – двовимірного.
Обравши одновимірний масив, завдяки if виконується вибір методу заповнення масиву. Потім з клавіатури обирається кількість елементів масиву. Це реалізовано завдяки scanf(), ним же реалізовуються всі присвоєння значень з клавіатури.
Завдяки оператору циклу for() реалізовується присвоєння значень випадковими числами або значеннями введеними з клавіатури. Для створення випадкових чисел використовується rand()%40 та srand(time(NULL)) з бібліотеки "time.h".
Нижче створено цикл для виводу початкового масиву. В ньому також реалізовано умову, що виводить значення з комою або без, в залежності від номеру елементу. Потім з клавіатури вводиться значення N. А нижче створено цикл в якому присвоюються значення новому масиву, а також виводиться сам масив.
Обравши двовимірний масив, завдяки if виконується вибір методу заповнення масиву. У випадку, коли введено некоректне значення, виводиться повідомлення о помилці.
Потім з клавіатури вводяться значення для кількості стовпців та рядків масиву. Завдяки циклу в циклі виконуються майже всі операції над двомірними масивами. У цьому випадку присвоюються випадкові значення або невипадкові з клавіатури(в залежності від вибору).
Нижче створено цикл в циклі, який досліджує максимальну кількість парних чисел у рядках масиву. Він працює так, що при знаходженні парного числа лічильник evenNumbers отримує +1. Після проходження рядка він присвоює своє значення іншому параметру, якщо цей параметр менше лічильника, а значення лічильника анулюється. Таким чином ми отримали значення, на яке потрібно збільшити кількість стовпчиків.
Нижче написано цикл в циклі, у якому записуються значення для нового збільшеного масиву на основі минулого масиву.
Потім створено цикл для проведення операції над масивом. Після кожного елемента з парним значенням створюється елемент з нулем, а всі наступні елементи переміщуються вправо.
В кінці створено цикл для виведення значень нового масиву.
Блок-схема:
(можна приближати)
/
Результати роботи:
/ /
/ /
Висновки: було створено програму в результаті якої реалізовано вивід початкових масивів та масивів після операцій. У випадку з одновимірним масивом було проведено вибору додатного елементу масиву та видалення з масиву цього елементу. У випадку з двовимірним масивом було відредаговано масив таким чином, що після кожного парного елементу було додано елемент зі значенням 0.
Код програми:
https://replit.com/join/kpprpwvixm-vladsosiedskii
#include <stdio.h>
#include "stdlib.h"
#include "time.h"
int main(void) {
srand(time(NULL));
printf("Введіть який масив Ви хочете задати.\n1 - одновимірний\n2 - двовимірний\nВибір: ");
int typeOfArray;
scanf("%d", &typeOfArray);
if(typeOfArray != 1 && typeOfArray != 2){
printf("Помилка. Вкажіть правильне значення.");
}
else{
if(typeOfArray==1){
int n;
printf("Виберіть спосіб заповнення масиву.\n1 - Випадковими числами \n2 - З клавіатури\nВибір: ");
int method;
scanf("%d", &method);
if(method != 1 && method != 2){
printf("Помилка. Вкажіть правильне значення.");
exit(0);
}
printf("Введіть кількість елементів масиву: ");
scanf("%d",&n);
int a[n], i=0;
if(method==1){
for(i=0;i<n;i++){
a[i]=-20 + rand() %40;
}
}
else if(method==2){
for(i=0;i<n;i++){
scanf("%d", &a[i]);
}
}
if(method==1 || method==2){
printf("a[%i]={", n);
for(i=0;i<n;i++){
if(i==(n-1)){
printf("%d", a[i]);
}
else{
printf("%d,", a[i]);
}
}
printf("}\n");
}
int N, newa[n];
printf("Введіть N: ");
scanf("%d",&N);
if((N<n+1)&(N>0)){
if(a[N-1]>0){
printf("Масив після редагування:\n");
printf("newa[%i]={", n-1);
}
else{
printf("newa[%i]={", n);
}
for(i=0;i<n;i++){
if(N==i+1 & a[i]>0){
}
else{
newa[i]=a[i];
if(i==(n-1)){
printf("%d", newa[i]);
}
else{
printf("%d,", newa[i]);
}
}
}
printf("}\n");
}
else{
printf("N не повинно бути більше ніж кількість елементів або менше одиниці\n");
}
}
//багатовимірний масив
else{
int rows, col, i, j, evenNumbers=0, maxcols=0, method;
printf("Виберіть спосіб заповнення масиву.\n1 - Випадковими числами \n2 - З клавіатури\nВибір: ");
scanf("%d", &method);
if(method != 1 && method != 2){
printf("Помилка. Вкажіть правильне значення.");
exit(0);
}
printf("Введіть кількість рядків масиву: ");
scanf("%d",&rows);
printf("Введіть кількість стовпців масиву: ");
scanf("%d",&col);
int b[rows][col];
if(method==1){
for (i=0; i<rows; i++){
for (j=0; j<col; j++){
b[i][j] =1+ rand ()%9;
}
}
}
if(method==2){
for (i=0; i<rows; i++){
for (j=0; j<col; j++){
scanf("%d", &b[i][j]);
}
}
}
printf ("\nВивід масиву:\n");
for (i=0; i<rows; i++){
for (j=0; j<col; j++){
if(b[i][j]%2==0){
evenNumbers++;
}
printf (" %d", b[i][j]);
}
printf("\n");
if(maxcols < evenNumbers){
maxcols = evenNumbers;
}
evenNumbers = 0;
}
int newcol= col+maxcols, newb[rows][newcol];
for (i=0; i<rows; i++){
for (j=0; j<newcol; j++){
if(j<col){
newb[i][j]=b[i][j];
}
else{
if(j<newcol){
newb[i][j]=0;
}
}
}
}
for (i=0; i<rows; i++){
for (j=0; j<newcol; j++){
if(newb[i][j]%2==0 & newb[i][j] != 0){
int l;
for(l=newcol-1;l>j;l--){
newb[i][l]=newb[i][l-1];
}
newb[i][j+1]= 0;
}
}
}
printf("\n\nВивід масиву після редагування:\n");
evenNumbers=0;
for (i=0; i<rows; i++){
for (j=0; j<newcol; j++){
if(newb[i][j]%2==0 && newb[i][j] !=0){
evenNumbers++;
}
}
for(j=0; j<(col+evenNumbers); j++){
printf(" %d", newb[i][j]);
}
evenNumbers=0;
printf("\n");
}
return 0;
}
}
}