Программа поиска максимального элемента среди минимальных на С++
Программа поиска максимального элемента среди минимальных элементов строк двухмерного целочисленного массива. Принципы программирования на языке С и понятие функции. Вывод сообщения с помощью двух функций. Макросы и определения заголовочного файла.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 26.12.2013 |
Размер файла | 238,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Задание
Напишите программу поиска максимального элемента среди минимальных элементов строк двухмерного целочисленного массива.
Условие примера соответствует поиску максимина в двухмерном массиве, т. е.
где - элементы матрицы .
Теоретическая часть
Принципы программирования на языке С основаны на понятии функции. Например, к системным функциям относятся printf (), scanf (), gets (), putchar () и др. Функции - это строительные элементы языка С и то место, в котором выполняется вся работа программы.
Большие программы обычно состоят из нескольких пользовательских функций и ряда системных функций. Функция - самостоятельная единица программы. Функции повышают уровень модульности программы, облегчают ее чтение, внесение изменений и коррекцию ошибок.
В основе всех программ на языке программирования С лежат одни и те же фундаментальные элементы - функции. В частности, функция main () является обязательной для любой программы. Во всех программах С определяется единая внешняя функцияс именем main (), служащая точкой входа в программу, то есть первой функцией, выполняемой после запуска программы.
Ни одна программа в языке С не может обойтись без функций.
Функция в языке С играет ту же роль, что и подпрограммы или процедуры в других языках. Каждая функция языка С имеет имя и список аргументов. По соглашению, принятому в языке С, при записи имени функции после него ставятся круглые скобки. Это соглашение позволяет легко отличить имена переменных от имен функций.
Рассмотрим модельный пример программы, в которой, кроме функции main (), содержатся еще три функции.
#include <stdio. h>
int main (void) /* Главнаяфункция */
{ /* Начало тела функции */
function1 () ; /* вызов первой функции */
function2 () ; /* вызов второй функции */
function3 () ; /* вызов третьей функции */
} /* Конец тела функции main () */
/* Начало определения первой функции */
function1 () { /* Начало тела первой функции */
/* Операторы первой функции */
/* Конец тела первой функции */
}
/* Начало определения второй функции */
function2 ()
{ /* Начало тела второй функции*/
/* Операторы второй функции */
/* Конец тела второй функции*/
}
/* Начало определения третьей функции */
function3 ()
{ /* Начало тела третьей функции*/
/* Операторы третьей функции */
/* Конец тела третьей функции*/
}
В условной (модельной) программе имеются четыре функции: main (), function1 (), function2 (), function3 (). Эти функции не имеют аргументов. Позднее рассмотрим функции, которые имеют аргументы. Аргументы функции - это величины, которые передаются функции во время ее вызова. Аргумент, стоящий в операторе вызова функции, называется фактическим параметром. Аргументы, стоящие в заголовке функции, называются формальными параметрами. В языке С функция может возвращать значение в вызывающую программу посредством оператора return. Оператор возврата из функции в точку вызова имеет две формы:
return;
return выражение;
В общем виде функция выглядит следующим образом:
возвр-тип имя-функции (список параметров)
{
Тело_функции
}
Тело_функции - это часть определения функции, ограниченная фигурными скобками и непосредственно размещенная вслед за заголовком функции. Тело функции может быть либо составным оператором, либо блоком. В языке С определения функций не могут быть вложенными, т. е. внутри одной функции нельзя объявить и расписать тело другой функции.
Возвращаемый тип возвр-тип функции определяет тип данного, возвращаемого функцией. Например, это могут быть int, float, double и т. д. В случае, когда функция ничего не возвращает, ей присваивается тип void.
Функция может возвращать любой тип данных, за исключением массивов. Список параметров - это список, элементы которого отделяются друг от друга запятыми. При вызове функции параметры принимают значения аргументов. Если функция без параметров, то такой пустой список можно указать в явном виде, поместив для этого внутри скобок ключевое слово void. Все параметры функции (входящие в список параметров) должны объявляться отдельно, причем для каждого из них надо указывать и тип, и имя. В общем виде список объявлений параметров должен выглядеть следующим образом:
fun (тип имя_перем1, тип имя_перем2,..., тип имя_перем N)
Например:
fun (inti, int j, float k, char str1, char str2)
Рассмотрим пример программы с выводом сообщения не в главной функции main (), а в другой:
#include <stdio. h>
#include <conio. h>
voidprintMessage (void)
{
printf («\n\t hello, world\n») ;
return;
printf («\n\t 123\n») ;
}
int main (void)
{
printMessage () ;
printf («\n Press any key: «) ;
_getch () ;
return 0;
}
Результат выполнения программы показан на рис. 1.
Рисунок 1 - Вывод сообщения с помощью двух функций
Программа состоит из двух функций: printMessage () и main (). Выполнение программы всегда начинается с функции main (), которую называют еще главной. Внутри функции main () происходит вызов функции printMessage () без параметров. Когда происходит вызов функции, выполнение программы передается непосредственно вызванной функции. Внутри функции printMessage () выполняется только утверждение
printf («\n\t hello, world\n») ;
Несмотря на то, что в функции printMessage () есть еще одно утверждение printf («\n\t 123\n»), которое не выполняется, поскольку используется утверждение возврата (return) из функции.
В языке С функция введена как один из производных типов.
Формальные параметры в определениях функций могут объявляться в форме прототипа]. Прототипы дают компилятору возможность тщательнее выполнять проверку типов аргументов. Если используются прототипы, то компилятор может обнаружить любые сомнительные преобразования типов аргументов, необходимые при вызове функции, если тип ее параметров отличается от типов аргументов. Компилятор также обнаружит различия в количестве аргументов, использованных при вызове функции, и в количестве параметров функции.
В общем случае прототип функции должен выглядеть таким образом:
тип имя_функции (тип имя_парам1, тип имя_парам2,..., тип им_парамN) ;
В приведенной выше программе прототип функции printMessage () не использовался, так как сама функция была объявлена до главной функции main (). Для переносимости С -кода в С ++ использование прототипа функции обязательно. Поэтому к хорошему стилю программирования относится использование прототипов функций, поскольку большие программы обычно состоят из нескольких функциях, часто расположенных в различных файлах.
Вышеприведенная программа с использованием прототипа функции printMessage () будет выглядеть следующим образом:
#include <stdio. h>
#include <conio. h>
//void printMessage (void) ; //Прототипфункции
int main (void) {
voidprintMessage (void) ; //Прототипфункции
printMessage () ; // Вызовфункции
printf («\n Press any key: «) ;
_getch () ;
return 0;
}
// Определениефункции
voidprintMessage (void)
{
printf («\n\t hello, world\n») ;
return;
printf («\n\t 123\n») ;
}
В листинге программы показаны две возможности использования прототипа функции printMessage (). При этом, сама функция printMessage () объявлена после функции main ().
Формальные параметры функции определены в прототипе функции. При обращении к функции используются фактические параметры, называемые аргументами функции.
Список фактических параметров - это список выражений, количество которых равно количеству формальных параметров функции (исключение составляют функции с переменным числом параметров). Соответствие между формальными и фактическими параметрами устанавливается по их взаимному расположению в списках. Между формальными и фактическими параметрами должно быть соответствие по типам.
Синтаксис языка С предусматривает только один способ передачи параметров - передачу по значениям. Это означает, что формальные параметры функции локализованы в ней, т. е. недоступны вне определения функции и никакие операции над формальными параметрами в теле функции не изменяют значений фактических параметров.
Передача параметров по значению предусматривает следующие шаги:
При компиляции функции выделяются участки памяти для формальных параметров, т. е. формальные параметры оказываются внутренними объектами функции. При этом для параметров типа float формируются объекты типа double, а для параметров типов char и shortint создаются объекты типа int. Если параметром является массив, то формируется указатель на начало этого массива, и он служит представлением массива-параметра в теле функции.
Вычисляются значения выражений, использованных в качестве фактических параметров при вызове функции.
Значения выражений - фактических параметров заносятся в участки памяти, выделенные для формальных параметров функции.
В теле функции выполняется обработка с использованием значений внутренних объектов-параметров, и результат передается в точку вызова функции как возвращаемое ею значение.
Никакого влияния на фактические параметры (на их значения) функция не оказывает.
После выхода из функции освобождается память, выделенная для ее формальных параметров.
Важным является момент, что объект вызывающей программы, использованный в качестве фактического параметра, не может быть изменен из тела функции. Для подобного изменения существует косвенная возможность изменять значения объектов вызывающей программы действиями в вызванной функции. Это становится возможным с помощью указателя (указателей), когда в вызываемую функцию передается адрес любого объекта из вызывающей программы. С помощью выполняемого в тексте функции разыменованияуказателя осуществляется доступ к адресуемому указателем объекту из вызывающей программы. Тем самым, не изменяя самого параметра (указатель-параметр постоянно содержит только адрес одного и того объекта), можно изменять объект вызывающей программы.
Массивы и строки также могут быть параметрами функции. В этом случае внутрь функции передается только адрес начала массива. Тогда можно в качесстве параметра использовать указатель. Приведем два равноправных прототипа функций:
float fun (int n, float A[ ], float B[ ]) ;
float fun (int n, float *a, float *b) ;
Поскольку массив передается в функцию как указатель, внутри функции можно изменять значения элементов массива-фактического параметра, определенного в вызывающей программе. Это возможно и при использовании индексирования, и при разыменованииуказателей на элементы массива.
В языке С существует возможность создавать функции, число аргументов которых не определено - функции с переменным числом аргументов [1]. При этом следует указать только количество аргументов. Пример прототипа функции с переменным числом аргументов:
int fun (int n, ј) ;
Многоточие (ј) в прототипе функции означает, что функция получает переменное число аргументов любого типа. Многоточие должно всегда находиться в конце списка параметров [1].
Макросы и определения заголовочного файла переменных аргументов stdarg. h (табл. 1) предоставляют программисту средства, необходимые для построения функций со списком аргументов переменной длины [1].
Таблица 1. Макросы заголовочного файла stdarg. h |
||
Идентификатор |
Объяснение |
|
va_list |
Тип, предназначающийся для хранения информации, необходимой макросам v_start, va_arg и va_end. Чтобы получить доступ к аргументам в списке переменной длины, необходимо объявить объект типа va_list |
|
va_start |
Макрос, который вызывается перед обращением к аргументам списка переменной длины. Он инициализирует объект, объявленный с помощью va_list, для использования макросамиva_arg и va_end |
|
va_arg |
Макрос, расширяющийся до выражения со значением и типом следующего аргументов списке переменной длины. Каждый вызов его изменяет объект, объявленный с помощью va_listтак, что объект указывает на следующий аргумент списка |
|
va_end |
Макрос обеспечивает нормальный возврат из функции, на список аргументов которой ссылается макрос va_start |
Примеры обращений к функции с фактическими аргументами:
double k;
double v1 = 1. 5,
v2 = 2. 5,
v3 = 3. 5;
// Первый вариант, где 3 - количество аргументов
k = fun (3, v1, v2, v3) ;
// Второй вариант, где 0. 0 - завершающий нуль списка аргументов
k = fun (v1, v2, v3, 0. 0) ;
Листинг программы:
//программа поиска максимального элемента среди минимальных элементов строк двухмерного целочисленного массива
#include<stdio. h>
#include<conio. h>
#include<stdlib. h>
#include<time. h>
#define n 6
#define m 7
constint N = 100;
int main (void)
{
//Прототипфункции
intMaxMin (int A[][m], intnn, int mm, int *imax, int *jmax) ;
inti, j, A[n][m], max, imax, jmax;
longint L;
L = (long) time (NULL) ;
srand ((unsigned) L) ;
//Заполнение матрицы целыми случайными числами
for (i = 0; i< n; ++i)
for (j = 0; j < m; ++j)
A[i][j] = 2*N*rand () /RAND_MAX - N;
// Распечаткаматрицы
printf («\n\t The original matrix A (% d*% d) : \n\n», n, m) ;
for (i = 0; i< n; ++i) {
printf («\t») ;
for (j = 0; j < m; ++j)
printf («% 4d», A[i][j]) ;
printf («\n») ;
}
max = MaxMin (A, n, m, &imax, &jmax) ;
printf («\n\t Result: MaxMin = A[% d][% d] =% d\n», imax+1, jmax+1, max) ;
printf («\n Press any key: «) ;
_getch () ;
return 0;
}
// Функцияпоискамаксмина
intMaxMin (int A[][m], intnn, int mm, int *imax, int *jmax)
{
inti, j, min, max, imin, jmin;
max = A[0][0];
*imax = 0; *jmax = 0;
for (j = 1; j < mm; ++j)
if (A[0][j] < max)
{max = A[0][j]; *imax = 0; *jmax = j; }
for (i = 1; i<nn; ++i) {
min = A[i][0]; imin = i; jmin = 0;
for (j = 1; j < mm; ++j)
if (A[i][j] < min)
{min = A[i][j]; imin = i; jmin = j; }
if (max < min)
{max = min; *imax = imin; *jmax = jmin; }
}
returnmax;
}
Рисунок 2 - Консольный вывод программы
максимальный минимальный элемент
Размещено на Allbest.ru
...Подобные документы
Изучение элементов языка С++, программирование разветвлений и циклов с использованием операторов условного и перехода. Обработка одномерных массивов. Поиск максимального элемента массива с заданной размерностью. Листинги программы и результатов.
курсовая работа [647,7 K], добавлен 05.02.2013Исходный текст программы и ее экранная форма. Программа вычисления и выдачи на печать суммы/произведения элементов бесконечного числового ряда, вычисления числового ряда для известного числа членов ряда. Значение максимального элемента в матрице.
контрольная работа [29,0 K], добавлен 07.12.2010Составление программы для нахождения минимального и максимального элементов массива. Программа вычисления корней квадратных алгебраических уравнений. Ранжирование одномерного массива по заданному признаку. Формирование массивов с помощью функции random.
контрольная работа [1,0 M], добавлен 30.04.2013Разработка программы для нахождения минимального и максимального элемента массива, вычисления среднего арифметического строк и столбцов транспортирования матриц. Характеристика основных программных средств. Описание программы, руководство пользователя.
курсовая работа [2,4 M], добавлен 26.04.2015Разработка программы на языке С#, которая будет заниматься построением бинарного дерева для исходных данных и их редактированием, поиском информации о товарах по заданному ключу. Графические схемы алгоритмов поиска и удаления элемента бинарного дерева.
курсовая работа [796,9 K], добавлен 22.02.2016Вычисление приближённых значений функций, представленных бесконечными рядами. Определение максимального элемента матрицы. Сортировка символов в порядке неубывания. Определение разности между первым и вторым значениями и вывод ее на экран как погрешность.
контрольная работа [20,9 K], добавлен 17.04.2014Свойства и виды алгоритмов. Составление программы, которая бы определила предыдущий и последующий символ для символа 'F' по таблице кодировки. Алгоритм нахождения максимального из двух значений. Программа замены местами в матрице элементов строк.
курсовая работа [133,4 K], добавлен 16.05.2015Краткое описание языка программирования С++. Алгоритм линейного выбора элемента, методов минимального (максимального) элемента и челночной сортировки. Анализ и разработка приложения, организующего сортировку массива данных пятью методами сортировки.
реферат [614,8 K], добавлен 12.04.2014Создание программы для поиска минимума функции двух вещественных переменных в заданной области с помощью генетического алгоритма. Генетические алгоритмы и операторы. Создание начальной популяции. Размножение. Мутация и селекция. Тестирование программы.
курсовая работа [131,6 K], добавлен 22.02.2015Решение задачи на составление компромиссного списка. Построение математической модели. Цена перемещения элементов. Вывод программы. Закреплении элемента а1 на первом месте, а а4 на пятом. Матрица оценок для задачи. Оптимальное решение в виде списка.
курсовая работа [37,5 K], добавлен 30.01.2016Заполнение массива из целых чисел с присвоением элементам разных значений. Варианты программы с использованием различных операторов организации циклов. Определение квадрата максимального из четных элементов массива и общего числа нулевых элементов.
лабораторная работа [259,3 K], добавлен 14.05.2011Описание алгоритма решения задачи графическим способом. Вывод элементов массива. Описание блоков укрупненной схемы алгоритма на языке Pascal. Листинг программы, а также ее тестирование. Результат выполнения c помощью ввода различных входных данных.
контрольная работа [150,4 K], добавлен 03.05.2014Разработка и реализация типовых алгоритмов обработки одномерных массивов на языке Delphi. Максимальный и минимальный элемент массива. Значение и расположение элементов массива. Элементы массива, находящиеся перед максимальным или минимальным элементом.
лабораторная работа [12,8 K], добавлен 02.12.2014Создание программы, которая позволяет пользователю задавать произвольную директорию, содержащую музыкальные файлы. Осуществление поиска или рекурсивного поиска файлов в этой директории и формирование csv-файла. Исправление тегов в музыкальных файлах.
курсовая работа [241,3 K], добавлен 13.02.2015Подсчет количества отрицательных элементов массива. Изменение исходного массива перемещением всех его положительных элементов в начало с исходным порядком их следования. Вывод на дисплей количества перемещенных элементов. Алгоритм и код программы.
лабораторная работа [946,5 K], добавлен 23.11.2014Модификация и сравнения двух текстовых файлов. Программа, написанная на языке программирования Cи и работоспособна на IBM совместимых компьютерах. Псевдографический и графический интерфейсы. Анализ программы методом сортировки одномерного массива.
курсовая работа [116,2 K], добавлен 21.02.2008Алгоритм добавления нового элемента в дерево и поиска по нему. Порядок разработки руководства пользователя. Принцип работы с экранным меню. Методика и этапы добавления нового элемента. Формирование и содержание инструкции системного программиста.
курсовая работа [411,8 K], добавлен 06.06.2014Виды информационно-вычислительных сетей: локальные, городские, глобальные; их классификация. Разработка программы на языке программирования С: формирование одномерного массива путем замены нулевых элементов на среднеарифметическое, а пробелов - на слова.
практическая работа [37,5 K], добавлен 20.05.2012Особенности поиска среднеарифметического значения элементов массива. Общая характеристика проблем разработки в среде Turbo Pascal программы упорядочивания массива по возрастанию. Рассмотрение основных этапов разработки программы на языке PASCAL.
курсовая работа [896,7 K], добавлен 18.05.2014Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.
контрольная работа [360,4 K], добавлен 13.06.2012