Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ СИ. Лабораторный практикум доцента кафедры «Системы управления и компьютерные технологии» Пановой Т.В..doc
Скачиваний:
106
Добавлен:
26.03.2015
Размер:
585.22 Кб
Скачать

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;

}

Соседние файлы в предмете Программирование