- •Т.В. Панова программирования на языке высокого уровня си Лабораторный практикум
- •Лабораторная работа №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. Описание подхода к решению задачи.
В поставленной задаче можно выделить три подзадачи: ввод, вывод и сортировка элементов двумерного массива. Подзадачи оформляются в виде функций, которые вызываются из главной функции.
M[с1][с2] – двумерный массив, содержащий с1 строк и с2 столбцов; p0 – указатель на двумерный массив.
2. Блок-схемы алгоритмов функций:
Блок-схема главной функции
Блок-схема функции ввода двумерного массива – Inp_mas(p,k,l)
Блок-схема функции вывода двумерного массива – Outp_mas(p,k,l)
Блок-схема функции сортировки строк двумерного массива – Sort_mas(p,l,s)
3. Текст программы:
#include <stdio.h>
#include <conio.h>
#define c1 5
#define c2 7
// Объявление прототипов функций
int Inp_mas(int*,int,int);
void Outp_mas(int*,int,int);
int Sort_mas(int*,int,int);
void main() // Определение главной функции
{
int i=0,M[c1][c2],n,m,*p0;
do
{
printf(“\nInput size of matric – n, m: ”);
scanf(“%d%d”,&n,&m);
}
while (n<=0||n>c1||m<=0||m>c2);
p0=&M[0][0];
Inp_mas(p0,n,m);
Outp_mas(p0,n,m);
while(i<n)
{
Sort_mas(p0,m,i);
i++;
}
Outp_mas(p0,n,m);
getch();
return;
}
// Определение функций
int Inp_mas(int *p,int k,int l) // функция ввода двумерного массива
{
int i=0;
printf(“\nInput matric:\n”);
while (i<k*l)
{
scanf(“%d”,p);
p++; i++;
}
printf(“\n”);
return 0;
}
void Outp_mas(int *p,int k,int l) // функция вывода двумерного массива
{
int i=0;
printf(“\nOutput matric:\n”);
while (i<k*l)
{
printf(“%d “,*p);
if ((i+1)%l==0)
printf(“\n”);
p++;
i++;
}
return;
}
int Sort_mas(int *p,int l,int s) // функция сортировки строк массива
{
int buf,k,j,pr;
p+=s*l;
pr=(s+1)%2;
for (k=0;k<l-1;k++)
for (j=l-2;j>=k;j--)
if (pr==0 && *(p+j)<=*(p+j+1) || pr!=0 && *(p+j)>=*(p+j+1))
{
buf=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=buf;
}
return 0;
}
4. Тестирование:
Теоретически рассчитанное выходное значение |
Практически полученное выходное значение |
Тест: входной двумерный массив n=4,m=3: 4 -3 5 9 -2 0 7 1 9 5 -3 8 | |
выходной массив: -3 4 5 9 0 -2 1 7 9 8 5 -3 |
выходной массив: -3 4 5 9 0 -2 1 7 9 8 5 -3 |
Задача 3
1. Постановка задачи: ввести и вывести две строки; подсчитать в одной строке количество одинаковых сочетаний символов другой строки.
2. Блок-схемы алгоритмов функций обработки строки:
Блок-схема функции ввода строки – Input_str(*str)
Блок-схема функции вывода строки – Output_str(*str)
Блок-схема функции подсчета количества заданного сочетания символов в строке – Count_str(*str1,*str2)
3. Текст программы:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define n 80
// Объявление прототипов функций
int Input_str(char*);
void Output_str(char*);
int Count_str(char*,char*);
int main() // Определение главной функции
{
char str1[n],str2[n];
Input_str(str1);
Input_str(str2);
Output_str(str1);
Output_str(str2);
printf(“\n%d”, Count_str(str1,str2));
return 0;
}
// Определение функций
int Input_str(char *str) // функция ввода строки
{
printf(“\nInput string: “);
gets(str);
return 0;
}
void Output_str(char *str) // функция вывода строки
{
printf(“\nOutput string: “);
puts(str);
return;
}
int Count_str(char *str1,char *str2) /* функция подсчета количества заданного сочетания символов в строке */
{
int i=0,m=0,lstr,lsym,k=0;
char *p;
lstr=strlen(str1);
lsym=strlen(str2);
p=str2;
while(i<=lstr)
{
if (*str1==*str2)
{
m++;
str2++;
if (m==lsym)
{
k++;
m=0;
str2=p;
}
}
else
{
m=0;
str2=p;
}
str1++;
i++;
}
return k;
}