Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример программы на обработку одномерного массива






 

//Найти и вывести номер элемента введенного с клавиатуры массива целых чисел,

//для которого сумма разностей с соседними элементами максимальна.

//Для крайних элементов использовать циклическое замыкание.

#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");

}

}

 







© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.