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

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

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

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

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

электротехнический университет “ЛЭТИ”

ФКТИ

Кафедра ВТ

Отчет по лабораторной работе №4

“Указатели и двумерные массивы в языке Си”

По дисциплине “Программирование”

Выполнил:

студент группы 3371,

Артемьев Ю.Г

Проверил:

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

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

2003

Цель работы:

Изучение указателей и динамической памяти в двумерных массивах в языке Си.

Задание:

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

Обработка массива:

Формирование в памяти компьютера нового двумерного массива, который удовлетворяет следующему условию: строки не должны включать заданный пользователем элемент.

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

  1. Введенный массив:

3 4 7

2 5 9

3 1 24

Введите число, которое не должно содержаться в строке матрицы 4

Новый массив:

2 5 9

3 1 24

  1. Введенный массив:

1 3 8

4 2 6

Введите число, которое не должно содержаться в строке матрицы 8

Новый массив:

4 2 6

  1. Введенный массив:

3 4 7

2 5 9

3 1 24

Введите число, которое не должно содержаться в строке матрицы 3

Новый массив:

2 5 9

  1. Введенный массив:

8 10 76

54 34 67

34 7 57

Введите число, которое не должно содержаться в строке матрицы 77

Новый массив:

8 10 76

54 34 67

34 7 57

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

Имя переменной

Тип переменной

Назначение

x

int

Указатель на двумерный массив

c

int

Указатель на новый двумерный массива

i

int

Номер строки элемента

j

int

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

m

int

Количество строк матрицы

n

int

Количество столбцов матрицы

b

int

Переменная, предназначенная для формирования нового двумерного массива

a

int

Число, не содержащееся в строке новой матрице

k

int

Счетчик строк новой матрицы.

d

unsigned char

Символ, управляющий циклом выполн. всей прогр.

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

#include<conio.h>

#include<stdio.h>

#include<alloc.h>

void main (void)

{

int **x = NULL, **c = NULL, i, j, m, n, b=1, a;

unsigned char d;

do

{

clrscr();

do

{

printf( "\nВведите количество строк матрицы [1...50] " );

scanf ( "%d", &m );

}

while( m < 1 || m > 50 );

do

{

printf( "\nВведите количество столбцов матрицы [1...50] " );

scanf ( "%d", &n);

}

while( n < 1 || n > A );

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

for( i = 0; i < m; i++ ) //Ввод двумерного массива.

{

x[i]=(int*)malloc(m*sizeof(int));

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

{

printf( "\nВведите элемент x[%i][%i] ", i+1, j+1 );

scanf( "%i", x[i]+j );

}

}

printf( "\nВведенный масив:\n");

for( i = 0; i < m; i++ ) //Вывод двумерного массива.

{

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

printf( "%6i", *(x[i]+j) );

printf( "\n");

}

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

printf( "\nВведите число, которое не должно содержаться в строке матрицы ");

scanf( "%d", &a);

int k = 0;

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

{

b = 0;

for( j = 0; j < n && !b; j++ )

{

if( *(x[i]+j) == a )

b = 1;

}

if( !b )

{

if( c == NULL )

c = (int**)malloc( (k+1) * sizeof(int*) );

else

c = (int**)realloc( c, (k+1) * sizeof(int*) );

c[k] = (int*)malloc( n * sizeof(int) );

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

*(c[k]+j) = *(x[i]+j);

k++;

}

}

if( k == 0 )

printf( "\nМассив пуст...\n" );

else

{

printf( "\nНовый массив:\n");

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

{

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

printf( "%6d", *(c[i]+j) );

printf( "\n");

}

}

printf( "Do you want continue to work with programm? y/n" );

d = getch();

}

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

}

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

При многократном вводе двумерного массива и переменной результаты совпали с контрольными примерами.

Заключение:

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