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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2016, 14:37   #1
Enni
Пользователь
 
Регистрация: 25.03.2016
Сообщений: 18
По умолчанию [c++] Транспонирование матрицы. Нужно разобраться в коде, напишите пожалуйста что делает каждая строка

Здравствуйте!
Нужно разобраться в коде, напишите пожалуйста что делает каждая строка.
Заранее спасибо!

Код:
#include<stdio.h> 

int main() 
{
int n,j,n1,i,d;  
float a,sum,mas[10][10]; 
printf("Vvedite razmer matricy"); 
scanf("%d %d", &n,&n1); 
if(n==n1)
{
printf("Zadajte chisla matricy"); 
for(i=0;i<n;i++) 
for(j=0;j<n;j++) 
scanf("%f",&mas[i][j]); 

printf("Matrica\n"); 
for(i=0;i<n;i++) 
{ 
for(j=0;j<n;j++) 
printf("%f\t",mas[i][j]); 
printf("\n"); 
}
  printf("Transponirovannaya matrica \n");
{
a=mas[j][i];
mas[j][i]=mas[i][j]; 
mas[i][j]=a;
}
  for(i=0;i<n;i++)
{
  for(j=0;j<n;j++)
  
 printf("%f\t",mas[j][i]);
 printf("\n");
}
 scanf("%f",&mas[j][i]);
 scanf("%f",&n);
}
}
Enni вне форума Ответить с цитированием
Старый 10.09.2016, 15:54   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А теорию ты знаешь? Расскажи мне о том, что скрывается за этим загадочным словосочетанием "транспонирование матрицы".

Последний раз редактировалось ura_111; 10.09.2016 в 16:05.
ura_111 вне форума Ответить с цитированием
Старый 10.09.2016, 16:04   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А зачем? Код скопирован с инета, сейчас еще кто-то распишет каждую строчку и можно преподу сдавать...
p51x вне форума Ответить с цитированием
Старый 10.09.2016, 16:08   #4
Enni
Пользователь
 
Регистрация: 25.03.2016
Сообщений: 18
По умолчанию

Транспонирование матрицы это когда строки заменяются на столбцы а столбцы на строки.
За замену отвечает эта часть кода:

a=mas[j][i];
mas[j][i]=mas[i][j];
mas[i][j]=a;
Enni вне форума Ответить с цитированием
Старый 10.09.2016, 16:17   #5
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А и правда. Я запустил программу. Столбцы поменялись местами со строками (1-столбец стал 1-м строчкой, а 2-столбец стал 2-й строчкой....)

1.jpg



Ладно, подожди я напишу по программе что знаю.
ura_111 вне форума Ответить с цитированием
Старый 10.09.2016, 17:10   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Код:
// Программа сделана на языке просто Си, т.к. в С++ вместо"stdio" есть аналог "cstdio" и <iostream>

#include<stdio.h> // Заголовочный файл. Он нужен чтобы работали функции scanf(...) и printf(...).
                  // На рис.1 привёл все функции. поддерживаемые этим файлом.

int main()       //  Стандартная функция в программах Си(С++). С неё начинается выполнение программы. Она должна быть в любой программе.
{
	int n, j, n1, i, d;               // Описание переменных, которые будут использоватся в программе
	float a, sum, mas[10][10];        // аналогично вышесказаному.   
	printf("Vvedite razmer matricy"); // Просто вывод надписи в консоль (см. рис.1). 
	scanf("%d %d", &n, &n1);          // Чтение из консоли 2-х значений и присвоение их переменных "n" и "n1" 
	// Разделение между перемемнными осуществяестя вводом т.е. сначало вводиш"n"-ENTER-вводишь"n1"-ENTER)
	// Можно было бы вместо одной строчки написать две:
	// scanf("%d", &n);
	// scanf("%d", &n1); //смысл бы не поменялся.
	// Что здесь ещё? "%d" - означает, программа ждет ввода числа целого вида (см. рис.2),
	//  "&n" - означает обратится по адресу, не путать с просто присвоить значение переменной  (когда используется "=")
	
	if (n == n1) // Сравнение чтобы матрица была квадратной (кол-во солбцов = кол-ву строк). 
	{ // У меня такое ощущение, что n1 лишнее (дальше оно не используется - я бы сделал только с одним "n" и без проверки).
		printf("Zadajte chisla matricy"); // уже писал - просто вывод надписи в консоль.
	
		// Два цикла, чтобы добраться до строк и столбцов матрицы  "mas[i][j]"
		// переменная i-это строчка, а j-это столбец матрицы. И "i,j" начинаются не с 1-цы, а с 0-ля 
		// (особенность Си (С++)) и до нестрого "n"
		for (i = 0; i<n; i++)   
		for (j = 0; j<n; j++)
			scanf("%f", &mas[i][j]); // Пользователь вводит с клавиатуры значения каждого элемента матрицы,
		// Обрати внимание "%f" (ТИП FLOAT), чем он отличается от "%d" см.рис.2
		
		printf("Matrica\n"); // Писал уже

		// Тоже что выше
		for (i = 0; i<n; i++)
		{
			for (j = 0; j<n; j++)
				printf("%f\t", mas[i][j]); // Вывод того что ввел пользовыать, только "удобном виде" см. "черный экран смерти" (консоль)
			// Что здесь ещё? Если после "for" один оператор, то скобки можно не ставить (такие "{ }" ). 
			printf("\n"); // переход на новую строчку (если бы не было - всё бы вывело в одну строчку. Нужна при каждом выводе новом строчки матрицы  
		}
		printf("Transponirovannaya matrica \n"); // Просто вывод надписи, обрати внимание на руководящий символ "\n" - переход на новую строчку
		
		// фИГНЯ КАКАЕТО. Я озадачен. К этому моменту "i=j=(n-1)". Использется скобки "{, }", а цикла никакого нет... Может здесь ещё что-то было?
		{                     // ???????????
			a = mas[j][i];    // ???????????
			mas[j][i] = mas[i][j];// ???????????
			mas[i][j] = a;        // ???????????
		}

// Ты мне нагнал: выше написанные строчки не транспозиция матрицы. Здесь вообще нет расчета транспозиции (смотри ниже: только просто выводится взад-наперед одну и ту же матрицу. И на этом всё)
// Я думал, что здесь есть какой-то "хитрый" алгоритм по обращению матрицы, которым можно пополнить мою копилку алгоритмов...


		// Уже писал про циклы
		for (i = 0; i<n; i++)
		{
			for (j = 0; j<n; j++)

				printf("%f\t", mas[j][i]); //Вывести транспонируемую матрицу. Обрати внимание на индекс "i,j" в "mas[j][i]"
			                               // ведь мы вводили (смотри выше) наоборот "mas[i][j]"
			printf("\n"); // Переход на новую строчку 
		}

		// ????????????????????  Зачем последние две строчки, не понимаю (ведь эти параметры уже введены пользователем!).
		scanf("%f", &mas[j][i]); // ввести с консоли число типа "%f" и передать его mas[j][i] (к этому моменту "i=j=(n-1)")
		scanf("%f", &n); // ввести с консоли число типа "%f" "n"
	}

}

1.jpg



2.jpg

Последний раз редактировалось ura_111; 10.09.2016 в 17:35.
ura_111 вне форума Ответить с цитированием
Старый 10.09.2016, 17:59   #7
Enni
Пользователь
 
Регистрация: 25.03.2016
Сообщений: 18
По умолчанию

ura_111, большое Вам спасибо за помощь!
Enni вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объясните, что делает этот код и напишите, пожалуйста, несколько комментариев narekkg Помощь студентам 0 12.06.2015 18:07
Демонстрация фрактальной графики. Поле из одуванчиков. Напишите пожалуйста что выполняет каждая строчка и за что отвечает Viksa123 Паскаль, Turbo Pascal, PascalABC.NET 5 08.03.2015 10:47
Опишите что каждая строка выполняет.... serverrulit Общие вопросы C/C++ 3 18.04.2012 06:41
Обьяснить код программи, что каждая строка делает NastyaV Фриланс 2 26.03.2011 17:04
Напишите пожалуйста за что отвечает каждая строчка Saaashka Помощь студентам 1 02.07.2008 08:34