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

Лабораторная работа №1 по С++

.cpp
Скачиваний:
30
Добавлен:
10.05.2014
Размер:
4.39 Кб
Скачать
// lab1.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h" // стандартная библиотека

#include <iostream> // библиотека ввода вывода
using namespace std; // позволяет использовать имена из библиотеки ввода вывода

struct row { // объявление структуры row для строк нашего массива
	int count; // переменная для хранения кол-ва элементов строке
	int *elements; // переменная для хранения массива элементов строки
}; // конец структуры 

void input(int &element) { // процедура ввода одного числа типа int
	while (!(cin>>element)) { // цикл пока не будет нормально считана цифра
		if (cin.eof()) // если введённая строка закончилась то
			break; // выходим из цикла
		cin.clear(); // очистка буфера ввода
		cin.ignore(); // пропуск не правильного символа
	} // конец цикла
} // конец процедуры

void inputrow(int *&elements, int n) { // процедура ввода массива элементов строки
	int i; // объявление переменной для счётчика цикла
	elements = new int[n]; // выделение памяти под массив
	for (i=0; i<n; i++)	{ // цикл от 0 до (кол-ва элементов строки)-1
		cout<<"["<<i+1<<"]: "; // вывод строки: ['номер элемента строки']:
		input(elements[i]); // ввод числа в переменную элемент_строки[номер_элемента] через процедуру input
	} // конец цикла
} // конец процедуры

void inputmas(row *&element, int n) { // процедура ввода массива
	int i; // объявление переменной для счётчика цикла
	for (i=0; i<n; i++)	{ // цикл от 0 до (кол-ва строк массива)-1
		cout<<"{"<<i+1<<"}Vv kol-vo stolbcov: "; // вывод строки: {'номер строки'}Vv kol-vo stolbcov: 
		input(element[i].count); // ввод числа столбцов через процедуру input
		inputrow(element[i].elements, element[i].count); // ввод столбцов через процедуру inputrow
	} // конец цикла
} // конец процедуры

void outputmas(row *&element, int n) { // процедура вывода массива на экран
	int i, j; // объявление переменных для счётчиков циклов
	for (i=0; i<n; i++)	{ // цикл от 0 до (кол-ва строк массива)-1
		for (j=0; j<element[i].count; j++) // цикл от 0 до (кол-ва элементов строки)-1
			cout<<element[i].elements[j]<<" "; // вывод строка[номер].столбец[номер]
		cout<<endl; // переход на следующую строку
	} // конец цикла
	cout<<endl; // переход на следующую строку
} // конец процедуры

row* restructmas(row *element, int n) { // функция сортировки строк массива
	int i; // объявление переменной для счётчика цикла
	row stakan; // объявление переменной для сортировки методом стакана или пузырька
	for (i=0; i<n-1; i++) // цикл от 0 до (кол-ва строк массива)-1
		if (element[i].elements[0] > element[i+1].elements[0]) { // условие если элемент строки под номером i > элемента строки под номером i + 1
			stakan = element[i+1]; // то 
			element[i+1] = element[i]; // меняем
			element[i] = stakan; // их местами
			i = -1; // возвращаем счётчик цикла на 0
		} // конец цикла
	return element; // возвращаем массив с отсортированными строками
} // конец функции

void freemas(row *&element, int n) { // процедура очистки памяти выделенной под массив
	int i; // объявление переменной для счётчика цикла
	for (i=0; i<n; i++) // цикл от 0 до (кол-ва строк массива)-1
		delete [] element[i].elements; // очищаем память выделенную под каждую строку
	delete [] element; // удаляем массив
} // конец процедуры

int _tmain(int argc, _TCHAR* argv[]) //основная функция программы
{
	int n; // объявление переменной для кол-ва строк массива
	cout<<"Vv kol-vo strok: "; // вывод строки: Vv kol-vo strok: 
	input(n); // ввод кол-ва строк в переменную n через функцию input

	row *mas = new row[n]; // объявление переменной под массив строк типа row размерности n
	inputmas(mas, n); // ввод массива mas через функцию inputmas
	cout<<endl<<"Massiv 1: "<<endl; // вывод строки: Massiv 1: и переход на новую строку 
	outputmas(mas, n); // вывод массива 1 через функцию outputmas

	row *newmas; // объявление переменной под отсортированный массив строк типа row
	newmas = restructmas(mas, n); // заполняем отсортированный массив через функцию restructmas
	cout<<"Massiv 2: "<<endl; // вывод строки: Massiv 2: и переход на новую строку 
	outputmas(newmas, n); // вывод отсортированного массива через функцию outputmas 

	freemas(mas, n); // очищаем память выделенную под первый массив

	return 0; // возвращаем 0, было с самого начала
} // конец функции