On-line: гостей 0. Всего: 0 [подробнее..]
Программисты всех стран, объединяйтесь!

АвторСообщение



ссылка на сообщение  Отправлено: 28.07.12 12:02. Заголовок: Поиск ошибки в программе для умножения матриц.


здрасте. В общем, я почти закончил свою программу. Так мне кажется. Но, при компиляции создается екзешник, затем по началу программа работает. Ввожу элементы матрицы, но до самих расчетов не доходит.
Вот сам исходник:



 цитата:
#include <iostream>
#include <conio.h>
using namespace std;


int main() {
int i=1,j=1,k=1,l=1;
int sum , rd1 , st1 , rd2 , st2 ;
char ch;
// ввод расширения первой матрицы.
cout << "Vveditb rozmirnistb pershoi Matruci: ";
cin >> rd1;
cin >> st1;
// ввод расширения 2 матрицы.
cout << "Vveditb rozmirnistb dryhoi matruci: ";
cin >> rd2;
cin >> st2;
// выход при не соответствии.
if (st1 != rd2) {
cout << "\nMatruc9 ne ob4usljuets9!";
getch();
return 0;
}
// ввод элементов матриц.
int a[rd1][st1];
for (i=1; i<=rd1; i++){
for (j=1; j<=st1; j++){
cout << "vveditb element a " << i << "_" << j << " = " << endl;
cin >> a[j];
}
};

int b[rd2] [st2];
for (k=1; k<=rd2; k++){
for (l=1; l<=st2; l++){
cout << "vveditb element b " << k << "_" << l << " = " << endl;
cin >> b[k][l];
}
};

cout << endl;
// умножение.
int t=0,z;
int C[j][t];
for (int j=0; j<rd2; j++){
while (t<st1){
for (int i=0; i<st1; i++){
z = a[t] * b[t] + z;
}
C[j][t] = z;
t++;
}
t=0;
}

// вывод результата
i=1;
j=1;
for (int i=1; i<=rd1; i++){
for (int j=1; j<=st2; j++){
cout << C[j];
}
cout << endl;
}
system("PAUSE");
return 0;
}




- если не трудно, посмотрите в чем может быть ошибка тут. Уже весь день с этой прогой сижу...

Спасибо: 0 
Цитата Ответить
Ответов - 70 , стр: 1 2 3 4 All [только новые]





ссылка на сообщение  Отправлено: 28.07.12 13:22. Заголовок: - цикл правильно! вы..


- цикл правильно! вы вроде просто не поняли как умножаться матрицы.


- а ви сделали только чтобы поэлементно множилось. или вообще не так.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:24. Заголовок: Я еще раз повторяю, ..


Я еще раз повторяю, исправь ошибку в цикле. Я ее красным цветом выделил. Код правильный.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:25. Заголовок: Сыроежка пишет: Я е..


Сыроежка пишет:

 цитата:
Я еще раз повторяю, исправь ошибку в цикле. Я ее красным цветом выделил. Код правильный.


- а, тысячу извинений. я думал, что исправил.
блин, ужасно протупил. стыдно.
спасибо большое за помощь. очень благодарен.
если что-нить помочь будет надо - то обращайтесь. помогу ем смогу.
еще один вопрос - с чего лучше начинать профессиональное изучение С++? есть какая-нибудь хорошая литература или нечто подобное? а то в нете масса всего, а толкового почти нет. потому хотел спросить у вас, специалиста.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:29. Заголовок: С азов надо начинать..


С азов надо начинать. Есть такая хорошая книжка для начального изучения С++, как Дж. Либерти "Освой самостоятельно С++ за 21 день".

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:31. Заголовок: Сыроежка пишет: С а..


Сыроежка пишет:

 цитата:
С азов надо начинать. Есть такая хорошая книжка для начального изучения С++, как Дж. Либерти "Освой самостоятельно С++ за 21 день".


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

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:32. Заголовок: Если делать "кра..


Если делать "красиво", то надо использовать графический режим. А прииспользовании стандартного потока вывода можно выводить лишь в режиме телетайпа. Конечно можно вставить разлиные заголовки перед выводом матриц. Можно также вывод каждой строки заключить в фигурные скобки. Но не более того.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:33. Заголовок: Сыроежка пишет: Есл..


Сыроежка пишет:

 цитата:
Если делать "красиво", то надо использовать графический режим. А прииспользовании стандартного потока вывода можно выводить лишь в режиме телетайпа. Конечно можно вставить разлиные заголовки перед выводом матриц. Можно также вывод каждой строки заключить в фигурные скобки. Но не более того.


- понятно. а вывод первой и второй матрицы делать так же, как и вывод результата?

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:34. Заголовок: Да, ведь вы имеете д..


Да, ведь вы имеете дело с одним и тем же типом объекта. Можно вообще оформить вывод матрицы в виде отдельной общей функции.

Что-то вроде следующего

void show( const char *title, int **a, int n, int m ) 
{
if ( title != NULL ) std::cout << title << "\n\n";

for ( int i = 0; i < n; i++ )
{
for ( int j = 0; j < m; j++)
{
std::cout << C[ i ][ j ] << ' ';
}
std::cout << endl;
}
}


И вызывать ее в коде в виде, например,

show( "Matrix A:", (int ** ) a, rd1, st1 );


или

show( "Matrix A:", reinterpret_cast<int **>( a ), rd1, st1 );




Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:38. Заголовок: А все начиналось где..


А все начиналось где-то на другом форуме __http://www.cyberforum.ru/cpp-beginners/thread386251.html, где наш герой заблокирован.

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:39. Заголовок: Сыроежка - сейчас по..


Сыроежка - сейчас попробую переоформить.
AlexMyr пишет:

 цитата:
А все начиналось где-то на другом форуме __http://www.cyberforum.ru/cpp-beginners/thread386251.html, где наш герой заблокирован.


- ну а разве я виноват, что там не было ответа? человек предложил помощь и собственно помог в решении задачи, за что я очень благодарен. в чем проблема-то?

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:41. Заголовок: akira пишет: - ну а..


akira пишет:

 цитата:
- ну а разве я виноват, что там не было ответа? человек предложил помощь и собственно помог в решении задачи, за что я очень благодарен. в чем проблема-то?



Проблема в том, что есть люди, которым становится очень плохо, когда у других все хорошо!:)

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:42. Заголовок: Сыроежка пишет: Про..


Сыроежка пишет:

 цитата:
Проблема в том, что есть люди, которым становится очень плохо, когда у других все хорошо!:)


- понятно.
у меня еще один вопрос.
я попробовал раскидать программу по функциям. но оно потом не распознает cout, cin и т.д. что можно с этим сделать?

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:43. Заголовок: В вашей исходной про..


В вашей исходной программе есть строчка

using namespace std;

которая помещает имена cout, cin из стандартного пространства имен в глобальное пространство имен. Таким образом вы можете не указывать явно для этих имен их пространство имен. То есть без этой директивы вы должны бы были писать

std::cin или std::cout

Теперь возвращаясь к вашему вопросу, возможно вы поместили определения функций перед этой директивой. Если это так, то компилятор действительно не знает, что это за имена cin и cout

Определения ваших функций должно находиться между этой директивой и телом функции main. Либо вы можете в эту область поместить объявления функций, а их определения поместить после тела функции main

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:44. Заголовок: - поменял. но теперь..


- поменял. но теперь константу не принимает почему-то.
вот код:

#include <iostream>
using namespace std;
int rd1 , st1 , rd2 , st2;

const mr=100;

int a[mr][mr];
int b[mr][mr];
int c[mr][mr];

void dimension(){

// расширение первой матрицы.
cout << "enter the dimension of the first matrix:" <<endl;
cout << "line=";
cin >> rd1;
cout << "column=";
cin >>st1;
// расширение второй матрицы.
cout << "enter the dimension of the second matrix:" << endl;
cout << "line=";
cin >> rd2;
cout << "column=";
cin >> st2;
// выход при неправильности условия.
if (st1 != rd2) {
cout << "product of these matrices can be calculated";

}
}

void input_a(){
// ввод элементов.

for (int i=0; i < rd1; i++){
for (int j=0; j<st1; j++){
cout << "type element a [" << i <<"]_[" << j << "] = ";
cin >> a [j];
}
}
}
void input_b(){

for (int k=0; k<rd2; k++){
for (int l=0; l<st2; l++){
cout << "type element b [" << k << "]_[" << l << "] = ";
cin >> b[k] [l];
}
}
}

void multiplication(){
// умножение.


for ( int i = 0 ; i < rd1 ; i++ )
{
for ( int j = 0 ; j < st2 ; j ++ )
{
c[j] = 0;
for (int k = 0 ; k < st1 ; k ++)
{
c[j] += a[k] * b[k] [j];
}
}
}
}

void output(){
// вывод результата.
cout << "result:" << endl;
for (int i=0; i < rd1; i++)
{
for (int j=0; j < st2; j++)
{
cout << c [j];
}
cout << endl;
}
}

int main(){

dimension();
input_a();
input_b();
multiplication();
output();

system("PAUSE");
return 0;
}


Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:45. Заголовок: Надо указать тип это..


Надо указать тип этой константы const mr=100;

Например,

const int mr=100;

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:46. Заголовок: Сыроежка пишет: Над..


Сыроежка пишет:

 цитата:
Надо указать тип этой константы const mr=100;


- прописать int mr
перед объявление константы?

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:47. Заголовок: Я привел пример в пр..


Я привел пример в предыдущем ответе.

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:48. Заголовок: - все, привел до ума..


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

Спасибо: 0 
Цитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:50. Заголовок: akira пишет: все, ..


akira пишет:

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



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

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 28.07.12 13:51. Заголовок: Сыроежка пишет: Но,..


Сыроежка пишет:

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


- а как это прописать?
cout << b[k] << " " << [l];
так?

Спасибо: 0 
Цитата Ответить
Ответов - 70 , стр: 1 2 3 4 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 2
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет