rail1/lab15

236 lines
5.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <Windows.h>
#define _CRT_SECURE_NO_WARNINGS
#define NUM_ELEMENTS 100
int arr[NUM_ELEMENTS][NUM_ELEMENTS];
int n = 3, m = 4;
void print_arr() {
printf("!!!! print() !!!!\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%3d ", arr[i][j]);
}
printf("\n");
}
}
void fillIx10() {
printf("!!!! fillIx10() !!!!\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = i * 10 + j;
}
}
}
void fillZero() {
printf("!!!! fillZero() !!!!\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = 0;
}
}
}
void randFill0_9() {
printf("!!!! randFill0_9() !!!!\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = rand() % 10;
}
}
}
void deleteRow(int delRow) {
printf("!!!! deleteRow(%d) !!!!\n", delRow);
for (int i = delRow; i < n - 1; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = arr[i + 1][j];
}
}
n--;
}
void save() {
FILE* fout = fopen("C:\\temp\\arr1.txt", "wt");
if (fout == NULL) {
printf("Выходной файл не создался");
return;
}
fprintf(fout, "%d ", n);
fprintf(fout, "%d\n", m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
fprintf(fout, "%d ", arr[i][j]);
}
fprintf(fout, "\n");
}
fclose(fout);
}
void load() {
FILE* fin = fopen("C:\\temp\\arr1.txt", "rt");
if (fin == NULL) {
printf("Входной файл не найден");
return;
}
fscanf_s(fin, "%d", &n);
fscanf_s(fin, "%d", &m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
fscanf_s(fin, "%d", &arr[i][j]);
}
}
fclose(fin);
}
void duplicateColumn(int colIndex) {
printf("!!!! duplicateColumn() !!!!\n");
for (int i = 0; i < n; i++) {
arr[i][m] = arr[i][colIndex];
}
m++;
}
void inputA() {
printf("Введите количество строк (n): ");
scanf_s("%d", &n);
printf("Введите количество столбцов (m): ");
scanf_s("%d", &m);
printf("Введите элементы массива:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("arr[%d][%d]: ", i, j);
scanf_s("%d", &arr[i][j]);
}
}
}
void oddnumx10() {
printf("!!!! oddnumx10 !!!!\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] % 2 != 0) {
arr[i][j] *= 10;
}
}
}
}
void multiples10() {
printf("!!!! multiples10 !!!!\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] % 10 == 0) {
arr[i][j] /= 10;
}
}
}
}
void func_11() {
int min, max, min_i, min_j;
min = arr[0][0]; max = arr[0][0];
min_i = 0; min_j = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[i][j] < min) {
min = arr[i][j];
min_i = i;
min_j = j;
}
if (arr[i][j] > max) {
max = arr[i][j];
}
}
}
int mean;
mean = (max + min) / 2;
for (int i = 0; i < min_i; i++) {
for (int j = 0; j < min_j; j++) {
arr[i][j] = mean;
}
}
}
void menu1() {
printf("\n");
printf("------------------------------\n");
printf("Выберите нужную вам операцию:\n");
printf("1: Заполнить значениями i * 10 + j\n");
printf("2: заполнить нулями\n");
printf("3: заполнить случайными значениями\n");
printf("4: все нечетные увеличить в 10 раз\n");
printf("5: все кратные 10 уменьшить в 10 раз\n");
printf("6: введите массив с клавиатуры\n");
printf("7: сохранить массив в файле\n");
printf("8: загрузить массив из готового файла\n");
printf("9: удалить заданную строку из массива\n");
printf("10: продублировать заданный столбец массива\n");
printf("11:все элементы, стоящие выше и левее min элемента\n");
printf("заменить на среднее арифметическое min и max элементов\n");
printf("\n");
printf("-1: Выйти из программы\n");
printf("Выбранная операция >>>>>> ");
}
void main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int item;
do {
print_arr();
menu1();
scanf_s("%d", &item);
printf("\n");
switch (item) {
case 9: {
int num;
printf("Номер строки, которую нужно удалить: ");
scanf_s("%d", &num);
deleteRow(num);
}
break;
case 7:
save();
break;
case 10: {
printf("Индекс столбца, чтобы его продублировать: ");
int c;
scanf_s("%d", &c);
duplicateColumn(c);
}
break;
case 1:
fillIx10();
break;
case 2:
fillZero();
break;
case 3:
randFill0_9();
break;
case 6:
inputA();
break;
case 5:
multiples10();
break;
case 4:
oddnumx10();
break;
case 8:
load();
break;
case 11:
func_11();
break;
}
} while (item != -1);
}