- •Т.В. Панова программирования на языке высокого уровня си Лабораторный практикум
- •Лабораторная работа №1. Обработка двумерных массивов данных………...…………….3
- •Лабораторная работа №1
- •Обработка двумерных массивов данных
- •I. Теоретические сведения.
- •II. Контрольные вопросы.
- •III. Практическая часть.
- •1. Выполнение общего задания.
- •2. Математическая модель и описательный алгоритм.
- •3. Блок-схема алгоритма:
- •4. Текст программы:
- •5. Тестирование:
- •2. Математическая модель и описательный алгоритм.
- •3. Блок-схема алгоритма:
- •4. Текст программы:
- •5. Тестирование:
- •2. Математическая модель и описательный алгоритм.
- •3. Блок-схема алгоритма:
- •4. Текст программы:
- •5. Тестирование:
- •5. Тестирование:
- •2. Математическая модель и описательный алгоритм.
- •3. Блок-схема алгоритма:
- •4. Текст программы:
- •5. Тестирование:
- •Лабораторная работа №2
- •Работа со строками
- •I. Теоретические сведения.
- •1. Некоторые стандартные функции обработки строк и их использование
- •II. Контрольные вопросы.
- •3. Блок-схема алгоритма:
- •4. Текст программы:
- •5. Тестирование:
- •2. Блок-схема алгоритма:
- •3. Текст программы:
- •4. Тестирование:
- •Лабораторная работа № 3
- •Функции
- •I. Теоретические сведения.
- •II. Контрольные вопросы.
- •III. Практическая часть.
- •2. Описание подхода к решению задачи.
- •2. Блок-схемы алгоритмов функций:
- •3. Текст программы:
- •4. Тестирование:
- •2. Блок-схемы алгоритмов функций обработки строки:
- •3. Текст программы:
- •4. Тестирование:
- •Лабораторная работа №4
- •Работа с файлами
- •I. Теоретические сведения.
- •Определение типов символов
- •II. Контрольные вопросы.
- •III. Практическая часть.
- •1. Выполнение общего задания.
- •2. Блок-схема алгоритма:
- •3. Текст программы:
- •2. Текст программы:
- •2. Текст программы:
- •2. Текст программы:
- •2. Выполнение индивидуального задания.
2. Математическая модель и описательный алгоритм.
Входной массив а размерностьюn=3,m=4:
-5 2 0 1
1 -3 2 5
3 1 2 2
Вычислить для каждой строки массива сумму произведения и суммы элементов массива этой строки, а затем найденные суммы просуммировать:
((-5∙2∙0∙1)+(-5+2+0+1))+((1∙(-3)∙2∙5)+(1-3+2+5))+((3∙1∙2∙2)+(3+1+2+2))=(0-2)+(-30+ +5)+(12+8)=-2-25+20=-7
В цикле с постусловием n≤0 или n>c1 или m≤0 или m>c2 (с1,c2 – константы) ввести размерности двумерного массива 0<n≤c1, 0<m≤c2;
p=p0=&a[0][0], i=0; в цикле с предусловием i<n∙m (n∙m – количество элементов) ввести значения элементов массива по адресу p, p=p+1, i=i+1;
p=p0, i=0; в цикле с предусловием i<n∙m вывести значения элементов массива *p, p=p+1, i=i+1;
для формирования результирующей суммы переменная sum=0;
во внешнем цикле с параметром для назначения номера строки 0≤i<n каждый раз обнулять переменную s (s=0) для формирования в ней суммы элементов текущей строки; переменной mul присваивать значение 1 (mul=1) с тем, чтобы в ней формировать произведение элементов текущей строки;
во вложенном цикле с параметром для назначения номера столбца 0≤j<m к содержимому s прибавляется значение текущего элемента назначенной строки *p (s=s+*p); содержимое mul умножать *p (mul=mul∙*p), p++;
после окончания вложенного цикла во внешнем цикле к содержимому переменной sum прибавлять вычисленное значение суммы произведения и суммы элементов текущей строки (sum=sum+s+mul);
после завершения цикла вывести полученное значение sum.
3. Блок-схема алгоритма:
4. Текст программы:
#include <stdio.h>
#include <conio.h>
#define c1 5
#define c2 7
int main()
{
int а[c1][c2],i=0,n,m,*p,*p0,sum,s,mul;
do
{
printf(“\nInput n,m: “);
scanf(“%d%d”,&n,&m);
}
while (n<=0 || n>c1 || m<=0 || m>c2);
p=p0=&a[0][0];
printf("\nInput elements of matrics:\n");
while (i<n*m)
{
scanf(“%d”,p);
p++;
i++;
}
p=p0;
i=0;
printf(“\nOutput matrics:\n”);
while (i<n*m)
{
printf(“%d ”,*p);
if ((i+1)%m==0) // для вывод двумерного массива в виде матрицы
printf(“\n”);
p++;
i++;
}
for(p=p0,sum=0,i=0;i<n;i++)
{
for(int s=0,mul=1,j=0;j<m;j++)
{
mul*=*p;
s+=*p;
p++;
}
sum+=mul+s;
}
printf("\n%d",sum);
getch();
return 0;
}
5. Тестирование:
Теоретически рассчитанное выходное значение |
Практически полученное выходное значение |
Тест: входной массив: n=3, m=4; a[n][m]: -5 2 0 1 1 -3 2 5 3 1 2 2 | |
результирующая сумма: sum=-7 |
результирующая сумма: sum=-7 |
Задача 3
1. Постановка задачи: разработать алгоритм, используя итерационные циклы ввода и вывода двумерного массива целых чисел, содержащего n строк и m столбцов, обмена местами строки, содержащей первый максимальный элемент массива, со строкой, содержащей последний минимальный элемент, и вывода полученного массива; написать программу, реализующую разработанный алгоритм.
2. Математическая модель и описательный алгоритм.
Входной массив х размерностью n=3, m=4: -1 8 0 -3
4 -3 7 5
9 0 9 0
Первый максимальный элемент: x(2,0)=9; последний минимальный элемент: x(1,1)=-3, т.е. менять местами вторую строку с первой; выходной массив x после перестановки строк: -1 8 0 -3
9 0 9 0
4 -3 7 5
В цикле с постусловием n≤0 или n>c1 или m≤0 или m>c2, где с1 и c2 (константы), ввести переменные размерности двумерного массива 0<n≤c1, 0<m≤c2;
p=p0=&x[0][0];
i=0; в цикле с предусловием i<n∙m ввести значения элементов массива по адресу p, p=p+1, i=i+1;
p=p0, i=0; в цикле с предусловием i<n∙m вывести значения элементов массива *p, p=p+1, i=i+1;
pmax=pmin=p=p0, i=0; использовать цикл с постусловием i<n∙m для нахождения первого максимального элемента, если *pmax<*p, то pmax=p и imax=i (номер первого максимального элемента в последовательности), и для нахождения последнего минимального, если *pmin≥*p, то pmin=p и imin=i (номер последнего минимального элемента), затем p=p+1и i=i+1;
после завершения цикла, чтобы определить номер первого элемента в тех строках, где находятся первый максимальный и последний минимальный элементы, необходимо номер соответствующей строки (imax/m – при делении целых чисел результат – целое число) умножить на количество элементов в строке (количество столбцов m): imax=imax/m*m, imin=imin/m*m;
i=0; в цикле с предусловием i<m переставить строки массива: buf=*(p0+imin+i), *(p0+imin+i)=*(p0+imax+i), *(p0+imax+i)=buf, i=i+1;
после завершения цикла i=0; в цикле с предусловием i<n∙m вывести значения элементов массива *p0, p0=p0+1, i=i+1.