Методичка_2013_14_весна(1курс) / Лаб_ раб_ 5_сост
.doc
ЛАБОРАТОРНАЯ РАБОТА № 5
РАЗРАБОТКА ПРОГРАММ, СОДЕРЖАЩИХ НЕСКОЛЬКО ЗАДАНИЙ
Цель работы:
Освоение разработки программ более сложной конфигурации, требующих осуществление выбора решения той или другой части программы с помощью простого меню.
1.1Требования к выполнению работы:
-
Для всех заданий вначале составить блок-схему общей структуры программы.
-
Каждую отдельную часть задания выполнить в виде отдельной функции, содержащей в свою очередь функции, предварительно составив блок-схему алгоритма решения этой части задания.
-
Тип функций выбрать самостоятельно и обосновать.
-
Предусмотреть вывод на печать исходных массивов, промежуточных и результирующих массивов, а также искомых результирующих величин.
-
Значения элементов массивов задавать с помощью генератора случайных чисел.
-
Предусмотреть выход из программы.
-
Выполнить второй вариант программы, поместив решение каждой задачи в отдельный файл, а основную программу поместить в третий файл.
1.2 Теоретические положения
Для выбора направления решения задачи можно использовать условный оператор if или оператор выбора варианта switch.
Пример: Заданы две задачи. В первой найти сумму элементов матрицы. максимальный элемент в массиве. Во второй найти и удалить максимальный элемент в массиве .
Фрагмент программы с использованием условного оператора будет выглядеть следующим образом:
/*Функция формирования матрицы
void form_matr(float *ptx, int n, int l )
{
int i,j;
for (i=0;i<n;i++)
for (j=0;j<l;j++)
*(ptx+i*l+j)=50*(float)rand()/RAND_MAX;
}
/*Функция вывода матрицы на экран
void vuvod_matr (float *ptx, int n,int l)
{
int i,j;
for (i=0;i<n;i++)
{ printf("\n ");
for (j=0;j<l;j++)
printf("%6.2f ",*(ptx+i*l+j));
}
}
/*Функция нахождения суммы элементов матрицы
void find_summa(float *ptx, int n, int l, float *s)
{
int i,j;
*s=0;
for (i=0;i<n;i++)
for (j=0;j<l;j++)
if ( *(ptx+i*l+j)>0) *s=*s+*(ptx+i*l+j);
}
/*Функция формирования массива
void form_masiv(float *x, int n )
{
int i;
for (i=0;i<n;i++)
*(x+i)=50*(float)rand()/RAND_MAX;
}
/*Функция вывода массива на экран
void vuvod_masiv (float *x, int n)
{
int i;
printf("\n ");
for (i=0;i<n;i++)
printf("%6.2f ",*(x+i));
}
/*Функция нахождения максимального элемента массива и его индекса
int find_max (float *x, int n)
{
int i,nom;
float max=-1000;
for (i=0;i<n;i++)
if(*(x+i)> max) {max=*(x+i);nom=i;}
return nom;
}
/*Функция удаления максимального элемента из массива
void udal_max(float *x, int n, int nom )
{
int i;
for (i=nom;i<n-1;i++)
*(x+i)=*(x+i+1);
}
/*Основная программа
void main()
{
float a[8][5],b[20],summa;
int i,j,nom_max, var=1;
do
{
clrscr();
printf("\n vvedite nomer zadania ");
scanf("%d",&var);
if(var==1)
{
clrscr();
form_matr(&a[0][0],5,4 );
printf("\n matriza ");
vuvod_matr (&a[0][0],5,4);
find_summa(&a[0][0], 5, 4, &summa);
printf("\n summa=%6.2f ",summa) ;
getch();
}
if(var==2)
{
clrscr();
printf("\n massiv ");
form_masiv(&b[0],20);
vuvod_masiv (&b[0],20);
nom_max= find_max (b,20);
printf("\n nom_max=%d ",nom_max);
udal_max(b,20,nom_max );
printf("\n rez massiv a ");
vuvod_masiv (&b[0],19);
getch(); }
if(var==3) exit(1);
}
while(var<3);
}
Основная программы с использованием оператора switch будет выглядеть следующим образом:
void main()
{
float a[8][5],b[20],summa;
int i,j,nom_max, var;
met: clrscr();
printf("\n vvedite nomer zadania ");
scanf("%d",&var);
switch(var)
{
case 1:
{
clrscr();
form_matr(&a[0][0],5,4 );
printf("\n matriza ");
vuvod_matr (&a[0][0],5,4);
find_summa(&a[0][0], 5, 4, &summa);
printf("\n summa=%6.2f ",summa) ;
getch(); goto met;
}
case 2:
{
clrscr();
form_masiv(&b[0],20);
vuvod_masiv (&b[0],20);
nom_max= find_max (b,20);
printf("\n nom_max=%d ",nom_max);
udal_max(b,20,nom_max );
printf("\n rez massiv a ");
vuvod_masiv (&b[0],19);
getch(); goto met;
}
case 3: exit(1);
}
}
В случае использования нескольких файлов, имена файлов, в которых расположены используемые функции, должны быть указаны в разделе директив препроцессора #include того файла, в котором содержится основная программа. Основных функций в подсоединяемых файлах быть не должно.
1.3 Варианты индивидуальных заданий.
Варианты индивидуальных задач приведенные в таблицы 1.1.
Для каждого варианта заданы две отдельные задачи по обработке одномерного массива и матрицы .
Таблица 1.1 Варианты индивидуальных заданий.
№ Вар-та |
№ задачи |
Условия задач |
1 |
1 |
Заданы массив действительных чисел. Сдвинуть его элементы циклическим сдвигом вперед так, чтобы максимальный элемент был на последнем месте. |
2 |
Дана матрица действительных чисел размером 4х8. Определить числа b1 b2 b3 b4, равные соответственно суммам элементов строк и найти из них большее. |
|
2 |
1 |
Задан массив целых чисел размером. Перенести в другой массив элементы, номер которых кратен 3. Найти среди них максимум. |
2 |
Дана матрица действительных чисел размером 6х7. Определить числа b1 b2 b3 b4 b5 b6 равные соответственно произведениям элементов строк и найти из низ меньшее. |
|
3 |
1 |
Задан массив целых чисел. Перенести в другой массив элементы с четными номерами и найти максимум среди них. |
2 |
Дана матрица действительных чисел размером 5х4. Определить числа b1 b2 b3 b4 b5 равные соответственно наименьшим значениям элементов строк и их сумму. |
|
4 |
1 |
Задан массив целых чисел. Подразумевается, что в нем могут идти подряд равные между собой элементы. Перенести в другой массив элементы, которые встречаются по одному. |
2 |
Дана матрица данного числа размером 8х10. Получить новую матрицу, путем деления ее элементов на наибольший по модулю элемент. |
|
5 |
1 |
Задан массив действительных чисел. Перенести в другой массив элементы, значение которых меньше (max+min)/2. |
2 |
Дана матрица данного числа размером 8х10. Получить новую матрицу, путем умножения ее элементов на значение наименьшего элемента главной диагонали. |
|
6 |
1 |
Задан массив целых чисел. Получить новый массив, отличающийся тем, что все четные элементы умножены на минимальный элемент. |
2 |
Дана квадратная матрица целых чисел размером 6х6. умножить элементы лежащие выше главной диагонали на минимальное значение всей матрицы. |
|
7 |
1 |
Задан массив целых чисел. Получить новый массив, отличающийся тем, что ко всем элементам прибавлен максимальный элемент. |
2 |
Дана квадратная матрица действительных чисел размером 6х6. Заменить элементы лежащие ниже главной диагонали соответствующими элементами, лежащими выше главной диагонали, умноженными на максимальный элемент всей матрицы |
|
8 |
1 |
Задан массив действительных чисел. Перенести в другой массив числа, значение которых лежат между средним арифметическим первой половины массива и средним арифметическим второй половины. |
2 |
Дана матрица действительных чисел размером 4х8. Определить числа b1 b2 b3 b4 , равные соответственно разностям наибольших и наименьших значений элементов строк и найти их сумму. |
|
9 |
1 |
Заданы массив действительных чисел. Перенести в другой массив числа, значение которых лежат между значением первого элемента массива и значением последнего. |
2 |
Дана матрица действительных чисел размером 6х5. Определить числа b1 b2 b3 b4 b5, равные соответственно суммам значений элементов столбцов найти наибольшее среди них. |
|
10 |
1 |
Заданы массив действительных чисел. Сдвинуть его элементы циклическим сдвигом вперед так, чтобы максимальный элемент был на первом месте. |
2 |
Дана матрица размером 9х13. Указать для каждой строки индекс максимального элемента. |
|
11 |
1 |
Задан массив действительных чисел. Найти средние арифметические значения среди положительных элементов и среди отрицательных. |
2 |
Дана матрица размером 9х13. Указать для индексы максимального элемента. |
|
12 |
1 |
Задан массив целых чисел. Найти средние арифметические значения среди четных значений элементов массива и среди нечетных. |
2 |
Дана матрица данного числа размером 8х10. Получить новую матрицу, путем деления ее элементов на наибольший по модулю элемент. |
|
13 |
1 |
Задан массив действительных чисел. Найти меньшее между максимальными значений элементов массива с четными индексами и нечетными. |
2 |
Дана квадратная матрица размером 8х8. Получить матрицу, в которой каждый элемент равен исходному, умноженному на минимальный среди элементов, расположенных на главной диагонали. |
|
14 |
1 |
Задан массив действительных чисел. Найти максимальные значения среди положительных элементов и среди отрицательных. |
2 |
Дана матрица действительных чисел размером 8х8. Получить новую матрицу, путем деления ее элементов на среднее арифметическое элементов главной диагонали. |
|
15 |
1 |
Задан массив целых чисел. Найти большее между суммой элементов с четными значениями и суммой элементов с нечетными значениями |
2 |
Дана квадратная матрица размером 8х8. Получить целочисленную квадратную матрицу, в которой каждый элемент равен 1, если соответствующий ему элемент исходной матрицы больше элемента, расположенного в начале строки и равен 0 в противоположном случае. |
|
16 |
1 |
Задан массив действительных чисел. Найти разницу между минимальным значением положительных элементов и минимальным значением модулей отрицательных элементов массива. |
2 |
Дана матрица действительных чисел размером 6х8. Получить массив, элементы которого меньше среднего арифметического всей матрицы. |
|
17 |
1 |
Задан массив действительных чисел. Найти большее среди сумм элементов массива с четными индексами и нечетными. |
2 |
Дана матрица действительных чисел размером 6х4. Определить числа b1 b2 b3 b4, равные соответственно максимумам элементов столбцов и найти в каком столбце этот максимум наименьший. |
|
18 |
1 |
Задан массив целых чисел. Найти большее между минимальным значением элементов с четными значениями и элементов с нечетными значениями |
2 |
Дана квадратная матрица размером 8х8. Получить матрицу, в которой каждый элемент равен исходному, умноженному на максимальный среди элементов, расположенных на главной диагонали. |
|
19 |
1 |
Задан массив целых чисел. Найти среднее между суммой элементов с четными значениями и суммой элементов с нечетными значениями |
2 |
Дана матрица действительных чисел размером 6х8. Получить массив, элементы которого лежат между средним арифметическим всей матрицы и (max+min)/2 всей матрицы. |
|
20 |
1 |
Задан массив действительных чисел. Найти большее среди максимальных значений элементов массива с четными индексами и нечетными. |
2 |
Дана квадратная матрица размером 8х8. Получить матрицу, в которой каждый элемент равен элементу исходной матрицы умноженному на максимум среди элементов побочной диагонали. |
|
21 |
1 |
Заданы массив действительных чисел. Сдвинуть его элементы циклическим сдвигом вперед так, чтобы минимальный элемент был на первом месте. |
2 |
Дана матрица действительных чисел размером 8х8. Получить новую матрицу, путем умножения ее элементов на среднее арифметическое элементов главной и побочной диагоналей. |
|
22 |
1 |
Задан массив действительных чисел. Перенести в другой массив числа, значение которых лежат между средним арифметическим первой половины массива и средним арифметическим всего массива. |
2 |
Дана квадратная матрица действительных чисел размером 6х6. Заменить элементы лежащие ниже побочной диагонали соответствующими элементами, лежащими выше побочной диагонали, умноженными на максимальный элемент всей матрицы |
|
23 |
1 |
Задан массив действительных чисел. Перенести в другой массив числа, значение которых лежат между средним арифметическим элементов массива с четными индексами и средним арифметическим элементов массива нечетными. |
2 |
Дана матрица действительных чисел размером 8х4. Определить числа b1 b2 b3 b4, равные соответственно суммам элементов столбцов и найти в каком столбце она наименьшая. |
|
24 |
1 |
Задан массив действительных чисел. Найти минимальные значения среди положительных элементов и среди отрицательных. Определить большее по модулю из этих двух значений |
2 |
Дана квадратная матрица размером 8х8. Получить матрицу, в которой каждый элемент равен исходному, умноженному на максимальный среди элементов, расположенных на побочной диагонали. |
|
25 |
1 |
Заданы массив действительных чисел. Сдвинуть его элементы циклическим сдвигом назад так, чтобы максимальный элемент был на последнем месте. |
2 |
Дана квадратная матрица размером 8х8. Получить целочисленную квадратную матрицу, в которой каждый элемент равен 1, если соответствующий ему элемент исходной матрицы больше элемента, расположенного на главной диагонали и равен 0 в противоположном случае. |