![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример программы на обработку одномерного массива
//Найти и вывести номер элемента введенного с клавиатуры массива целых чисел, //для которого сумма разностей с соседними элементами максимальна. //Для крайних элементов использовать циклическое замыкание. #include< stdio.h> #include< conio.h> #include< string.h> #include< math.h> const int RAZ = 10; //размер массива int nomer(int a[], int & max); void inputmas(int a[]); void okno(int x1, int y1, int x2, int y2, int bkcol, int colb, char zag[15]); void main() {int a[RAZ]; //массив int nom; //номер искомого элемента int max; //значение максимальной разности okno(1, 1, 80, 25, BLACK, WHITE, " "); okno(15, 1, 65, 5, WHITE, BLUE, " Описание"); cprintf(" \r\n В массиве целых чисел найти номер"); cprintf(" \n\r элемента, для которого сумма разностей"); cprintf(" \n\r с соседними элементами максимальна"); okno(15, 15, 65, 20, RED, WHITE, " Результат поиска"); okno(15, 7, 65, 13, WHITE, BLUE, " Окно ввода"); //Ввод исходных данных inputmas(a); //Поиск номера элемента nom = nomer(a, max); okno(15, 15, 65, 20, RED, WHITE, " Результат поиска"); cprintf(" \n\r Искомый номер элемента массива: %i", nom); cprintf(" \n\r Значение элемента: %i, сумма разностей= %i", a[nom], max); cprintf(" \n\r Для завершения нажмите < Enter> "); getch(); }
int nomer(int a[], int & max) {int pr; //текущее значение разности int imax = 0; //за максимум принимаем первый по счету элемент max = abs(a[RAZ - 1] - a[0]) + abs(a[1] - a[0]); for(int i = 1; i < RAZ - 1; i++) if(max < (pr = abs(a[i-1] - a[i]) + abs(a[i+1] - a[i]))) {imax = i; max = pr; } if(max < abs(a[0] - a[RAZ - 1]) + abs(a[RAZ - 2] - a[RAZ-1])) imax = RAZ - 1; return imax; }
void okno(int x1, int y1, int x2, int y2, int bkcol, int colb, char zag[15]) {window(x1, y1, x2, y2); textbackground(bkcol); textcolor(colb); clrscr(); gotoxy((x2 - x1 - strlen(zag)) / 2, 1); cprintf(" %s\n\r", zag); } void inputmas(int a[]) {cprintf(" Введите в одной строке элементы массива, \n\r"); cprintf(" состоящего из %i целых чисел, и нажмите < Enter> \n\r", RAZ); cprintf(" -> "); for(int i = 0; i < RAZ; i++) scanf(" %i", & a[i]); }
Пример программы на обработку двумерного массива (матрицы)
//Программа находит строку введенного с клавиатуры двумерного массива целых //чисел, содержащую максимальную сумму элементов
#include < stdio.h> #include < conio.h> #include< stdlib.h> #include< string.h> const RAZ = 10; //размер одного измерения массива
void inputmatr(int matr[][RAZ], int & m, int & n); void okno(int x1, int y1, int x2, int y2, int bkcol, int colb, char zag[15]); int exist(int matr[][RAZ], int n, int x, int p, int k); void poisk_st(int m, int n, int matr[][RAZ], int & max, int & jmax); void outmatr(int m, int n, int matr[][RAZ], int imax);
void main() {int a[RAZ][RAZ]; //массив int imax; //номер строки с максимальной суммой элементов int max; //максимальная сумма элементов int m; //число строк int n; //число столбцов
okno(1, 1, 80, 25, BLACK, WHITE, " "); okno(15, 1, 60, 4, WHITE, BLUE, " Описание"); cprintf(" \r\n В матрице целых чисел найти номер строки, "); cprintf(" \n\r содержащей максимальную сумму элементов"); okno(10, 10, 65, 25, RED, WHITE, " Результат"); okno(15, 6, 60, 8, WHITE, BLUE, " Окно ввода"); //ввод исходных данных inputmatr(a, m, n);
//поиск строки с максимальной суммой элементов poisk_st(m, n, a, max, imax);
//вывод матрицы okno(10, 10, 65, 25, RED, WHITE, " Результат"); cprintf(" \n\r Максимальная сумма элементов строки (%i) содержится", max); cprintf(" \n\r в %i-ой строке исходного массива\n\r", imax + 1); outmatr(m, n, a, imax); cprintf(" \n\r Для завершения нажмите < Enter> ");
getchar(); getchar(); }
//ввод исходных данных void inputmatr(int matr[][RAZ], int & str, int & sto) {int i, j; cprintf(" \n\r Введите число строк в массиве < %i: ", RAZ); scanf(" %i", & str); cprintf(" \r Введите число столбцов в массиве < %i: ", RAZ); scanf(" %i", & sto); randomize(); for(i = 0; i < str; i++) //перебор строк for(j = 0; j < sto; j++) //перебор столбцов do{matr[i][j] = random(100); } while (exist(matr, sto, matr[i][j], i, j)); }
void okno(int x1, int y1, int x2, int y2, int bkcol, int colb, char zag[15]) {window(x1, y1, x2, y2); textbackground(bkcol); textcolor(colb); clrscr(); gotoxy((x2 - x1 - strlen(zag)) / 2, 1); cprintf(" %s", zag); }
int exist(int matr[][RAZ], int n, int x, int p, int k) {int i, j; for(i = 0; i < = p; i++) for(j = 0; j < n; j++) {if((i == p) & & (j == k)) return 0; if(matr[i][j] == x) return 1; } return 0; }
void poisk_st(int str, int sto, int matr[][RAZ], int & max, int & imax) {int i, j, pr; imax = 0; //за максимум принимаем сумму элементов первой строки max = 0; for(j = 0; j < sto; j++) max += matr[0][j]; for(i = 1; i < str; i++) {pr = 0; for(j = 0; j < sto; j++) pr += matr[i][j]; if(max < pr) {imax = i; max = pr; } } }
void outmatr(int m, int n, int matr[][RAZ], int imax) {int i, j;
for(i = 0; i < m; i++) {for(j = 0; j < n; j++) if(i == imax) {textbackground(WHITE); textcolor(BLUE); cprintf(" %4i", matr [i][j]); textcolor(WHITE); textbackground(RED); } else cprintf(" %4i", matr[i][j]); cprintf(" \n\r"); } }
|