Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2019, 15:36   #1
NickNuclear
Новичок
Джуниор
 
Регистрация: 13.06.2019
Сообщений: 2
Вопрос c++ матрицу из символов увеличить в n раз

Написать программу, которая исходную картинку зеркально отражает
относительно оси абсцисс(OX) и увеличивает в n раз. Это одна из лабораторных работ в моем Вузе. Собственно, я ее частично сделал, но со вторым условием про увеличение в n раз у меня совсем ничего не получается.
Помогите пожалуйста сделать условие про увеличение в n раз
Код:
/* 26.
Написать программу, которая исходную картинку(массив[10][10] зеркально отражает относительно оси абсцисс(OX), преобразует в негатив и увеличивает в n раз.
так выглядит матрица в текстовом файле:
**********
**********
**********
**********
----**----
----**----
----**----
--******--
---****---
----**----
*/
#include <iostream> 
#include <fstream> 
using namespace std;
const char* FNAME = "Text.txt";
int main()
{
	setlocale(LC_ALL, "rus");
	int n, m;
	char mas[10][10];
	
	ifstream fin;//файловый ввод 
	ofstream fout;//файловый вывод 
	fin.open(FNAME);
	cout << "Изначальная картинка:" << endl;
	for (int x = 0; x < 10; x++)
	{
		for (int y = 0; y < 10; y++)
		{
			fin >> mas[x][y];
			cout << mas[x][y];
		}
		cout << endl;
	}
	cout << endl << "После обработки:" << endl;
	// инвертирую по оси ОХ
	char tmp;
	for (int y = 0; y < 10; y++)
	{
		for (int x = 0; x < 10; x++)
		{
			if (y < 5)
			{
				tmp = mas[y][x];
				mas[y][x] = mas[9 - y][x];
				mas[9 - y][x] = tmp;
			}
			cout << mas[y][x];
		}
		cout << endl;
	}
	cout << "Укажите во сколько раз увеличить картинку: (от 2 до 5)" << endl;
	cin >> n;
	cout << "Масштаб увеличения:" << " x" << n << endl;
	char **Xmas = new char*[n];//Динамический массив
	m = n;
	for (int i = 0; i < 10 * n; i++)
	{
		Xmas[i] = new char[m];
	}
	//увеличение
	for (int y = 0; y < 10; y++)
	{
		for (int x = 0; x < 10; x++)
		{
			/*тут, по идее, должны быть какие то операции с элементами
			массива, чтобы увеличить исходную картинку в n раз*/
		}
		cout << endl;
	}
	for (int i = 0; i < n; i++)
	{
		delete[] Xmas[i];
	}
	delete[] Xmas;

	system("pause");
	return(0);
}
Заранее спасибо всем кто откликнется!
П.С. Код не работает, сразу говорю, я еще с динамическим массивом не разобрался там до конца.
NickNuclear вне форума Ответить с цитированием
Старый 13.06.2019, 18:27   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от NickNuclear Посмотреть сообщение
Код:
char **Xmas = new char*[n];  //Динамический двухмерный массив
m = n;
for(int i = 0; i < 10*n; i++)
{
    Xmas[i] = new char[m];
}
- через строку в fore сделали 10*n, а в 1-ой строке забыли.
Код:
char **Xmas = new char*[10*n];  //Динамический двухмерный массив
Cuprum5 вне форума Ответить с цитированием
Старый 13.06.2019, 18:39   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от NickNuclear Посмотреть сообщение
Код:
//увеличение
for(int y = 0; y < 10; y++)
{
    for(int x = 0; x < 10; x++)
    {
        /*тут, по идее, должны быть какие то операции с элементами
	массива, чтобы увеличить исходную картинку в n раз*/
    }
    cout << endl;
}
- тут по идее надо брать символ из исходного массива и размножать его на n символов выходного нового массива.
Код:
//увеличение
for(int Str = 0; Str < 10; Str++)
{
    for(int Stl = 0; Stl < 10; Stl++)
    {
        for(int StrN = 0; StrN < n; StrN++)
        {
            for(int StlN = 0; StlN < n; StlN++)
            {
                Xmas[Str*n + StrN][Stl*n + StlN] = mas[Str][Stl];
            }
        }
    }
}
Cuprum5 вне форума Ответить с цитированием
Старый 13.06.2019, 19:00   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Код:
/* 
Написать программу, которая исходную картинку(массив[10][10] зеркально отражает относительно оси абсцисс(OX), преобразует в негатив и увеличивает в n раз.
так выглядит матрица в текстовом файле:
**********
**********
**********
**********
----**----
----**----
----**----
--******--
---****---
----**----
*/
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const char* FNAME = "Text.txt";


int main()
{
	setlocale(LC_ALL, "rus");
	int n, m;
	char mas[10][10];

	ifstream fin;    //файловый ввод
	ofstream fout;   //файловый вывод
	fin.open(FNAME);
	cout << "Изначальная картинка:\n";

	for (int x = 0; x < 10; x++)
	{
		for (int y = 0; y < 10; y++)
		{
			fin >> mas[x][y];
			cout << mas[x][y];
		}
		cout << endl;
	}


	cout << endl << "После обработки:" << endl;
	//инвертирую по оси ОХ
	char tmp;
	for (int y = 0; y < 10; y++)
	{
		for (int x = 0; x < 10; x++)
		{
			if (y < 5)
			{
				tmp = mas[y][x];
				mas[y][x] = mas[9 - y][x];
				mas[9 - y][x] = tmp;
			}
			cout << mas[y][x];
		}
		cout << endl;
	}


	cout << "Укажите во сколько раз увеличить картинку: (от 2 до 5)" << endl;
	cin >> n;
	cout << "Масштаб увеличения: x" << n << endl;
	char **Xmas = new char*[10*n];  //Динамический двухмерный массив
	m = 10*n;
	for (int i = 0; i < 10 * n; i++)
	{
		Xmas[i] = new char[m];
	}


    //увеличение
    for(int Str = 0; Str < 10; Str++)
    {
        for(int Stl = 0; Stl < 10; Stl++)
        {
            for(int StrN = 0; StrN < n; StrN++)
            {
                for(int StlN = 0; StlN < n; StlN++)
                {
                    Xmas[Str*n + StrN][Stl*n + StlN] = mas[Str][Stl];
                }
            }
        }
    }

	
	for(int StrN = 0; StrN < 10*n; StrN++)
        {
            for(int StlN = 0; StlN < 10*n; StlN++)
            {
                cout << Xmas[StrN][StlN];
            }
	     cout << "\n";
        }


	for (int i = 0; i < 10*n; i++)
	{
		delete[] Xmas[i];
	}
	delete[] Xmas;

	system("pause");
	return(0);
}
Вообще, не очень хорошо было в первом цикле делать наружный цикл по x, внутренний по y, а потом все это дело поменять.
Cuprum5 вне форума Ответить с цитированием
Старый 14.06.2019, 14:30   #5
NickNuclear
Новичок
Джуниор
 
Регистрация: 13.06.2019
Сообщений: 2
По умолчанию

Спасибо огромное! Все получилось)
3 и 4 внутренними циклами мы рисуем матрицы n ного размера.. точно..
NickNuclear вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сформировать матрицу А6&#215;6 случайных целых чисел в диапазоне от 0 до 100. Напечатать матрицу. Predgornoe Общие вопросы C/C++ 2 08.01.2015 22:14
Увеличить количество символов названия группы в соцсети CCC Фриланс 5 30.09.2012 18:06
как умножить матрицу(3на4) на матрицу(4на3) в делфи? Ромка678 Помощь студентам 1 28.11.2009 08:01
Объясните пожалуйста как можно считать значения в этом файле в вектор, 4 -ую матрицу, 6-ую матрицу ciaonataha Помощь студентам 1 30.03.2009 20:57