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