Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №4

.doc
Скачиваний:
8
Добавлен:
01.05.2014
Размер:
417.28 Кб
Скачать

Министерство образования РФ

Санкт-Петербургский государственный электротехнический университет

“ЛЭТИ”

Кафедра Вычислительной Техники

Лабораторная работа № 4

По дисциплине «Программирование»

«Указатели в языке Си»

Выполнил: Власюк А. В.

Преподаватель:

Сискович Т. И.

Факультет: КТИ

Группа: 3371

Санкт-Петербург

2003

Цель работы:

В ходе выполнения лабораторной работы студент должен научиться применять на практике указатели.

Задание на лабораторную работу:

Написать программу, выполняющую (по желанию пользователя) ввод матрицы размером (n x m), контрольный вывод исходной матрицы и формирование новой из тех столбцов исходной, в которых значения больше сумм их индексов. Вывести результат в виде двумерной матрицы. Память для массивов должна выделяться динамически.

Контрольный пример:

Длина исходного массива

Высота исходного массива

Элементы исходного массива

Результат

0

0

отсутствуют

Неверные значения исходных параметров

2

2

  1. 1

-1 2

Нет матрицы,удовлетворяющей

данному условию

2

2

  1. 2

1 3

2

3

2

3

  1. 2 2

  2. 5 6

  1. 2

  2. 5

3

3

0 -2 3

2 3 4

3 4 5

3

4

5

Описание данных:

переменная

тип

описание

n

int*

количество строк исходного массива

m

int*

количество столбцов исходного массива

k

int

количество столбцов нового массива

i

int

номер строки

j

int

номер столбца

a

int

исходный массив

b

int

новый массив

t

int

вспомогательная переменная

s

char

символ управления циклом

Текст программы:

#include<conio.h>

#include<stdio.h>

#include<alloc.h>

void main (void)

{

clrscr();

int**a,**b;

int i,j,n,m,k,c,t;

char s;

printf("\n\n\n\n\n Программа предназначенная для создания матрицы, ");

printf(" а также для формирования новой матрицы, ");

printf(" удовлетворяющей заданному условию ");

printf(" (значения в столбцах больше сумм их индексов) ");

getch();

clrscr();

//Ввод размеров массива 

do

{

do

{

clrscr();

printf("\n\n\n\n\n Введите размер матрицы.\n ");

printf(" (n-количество строк,m-количество столбцов)");

printf("\nn= ");

scanf("%d",&n);

printf("m= ");

scanf("%d",&m);

if (n<=0||m<=0)

{

printf("\n Внимание!Неверные значения исходных параметров.");

printf("\n (Нажмите любую клавишу для продолжения) ");

getch();

clrscr();

}

printf("\n \n");

printf(" Изменить размеры матрицы? (y/n)");

s=getche();

}

while(s=='y'||s=='Y');

//Ввод массива 

do

{

clrscr();

printf("\nВведите значения массива:\n");

a=(int**)malloc(n*sizeof(int*));

for(i=0;i<n;i++)

{

*(a+i)=(int*)malloc(m*sizeof(int));

for(j=0;j<m;j++)

{

scanf("%d",*(a+i)+j);

}

}

//Вывод массива

printf("\n Контрольный вывод матрицы\n\n\n");

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

{

printf("a[%d][%d]=%d ",i,j,*(*(a+i)+j));

}

printf("\n\n");

}

printf(" \n Изменить введённую матрицу? (y/n) ");

s=getch();

}

while(s=='y'||s=='Y');

//Формирование нового массива

k=0;

b=(int**)malloc(m*sizeof(int*));

for(j=0;j<m;j++)

{

for(i=0,t=0;i<n&&!t;i++)

{

if (*(a[i]+j)<=(i+j)) t++; //условие отбора

}

if (!t)

{

*(b+k)=(int*)malloc(n*sizeof(int));

for(i=0;i<n;i++)

{

*(*(b+k)+i)=*(*(a+i)+j); //запись в новый массив

}

k++;

}

}

//Вывод нового массива

clrscr();

printf("\n\n\n Вывод исходной матрицы\n\n");

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

{

printf(" a[%d][%d]=%d ",i,j,*(*(a+i)+j));

}

printf("\n");

}

printf("\n\n\n Вывод конечной матрицы\n\n");

if(k>0)

{

for(i=0;i<n;i++)

{

for(j=0;j<k;j++)

{

printf(" b[%d][%d]=%d ",i,j,*(b[j]+i));

}

printf("\n");

}

}

else

{

printf(" Нет матрицы,удовлетворяющей данному условию");

}

printf("\n\n Продолжить работу? (y/n) ");

s=getch();

printf("\n \n");

clrscr();

}

while(s=='y'||s=='Y');

}

Блок схема:

нет

да

нет

да

да

нет

да

нет

да

нет

да

нет

да

нет

нет

да

да

нет

нет

да

нет

да

нет

Пояснения:

Сообщение 1: Программа предназначенная для создания матрицы,

а также для формирования новой матрицы,

удовлетворяющей заданному условию

(значения в столбцах больше сумм их индексов)

Сообщение 2: Внимание!Неверные значения исходных параметров.

(Нажмите любую клавишу для продолжения)

Сообщение 3: Нет матрицы,удовлетворяющей данному условию

Условие 1: Изменить размеры матрицы? (y/n) Условие 2: Изменить введённую матрицу? (y/n)

Условие 3: if (*(*(a+i)+j)<=(j+i)) Условие 4: Продолжить работу? (y/n)

да

нет

да

нет

да

нет

да

нет

Результаты решения задачи:

Все полученные ответы совпадают с контрольными примерами.

Выводы:

Данная лабораторная работа позволяет программисту освоить указатели.