Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание двумерного массива 
:(
    Опции темы
dimmon123
Дата 15.10.2012, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



feodorv, сделал 3 задание, в 4 надо модифицировать программу из предыдущего задания так, чтобы после заполнения 2х матриц пользователя спрашивали, желает ли он выполнить умножение или сложение матриц и выполнялась выбранная пльзователем операция. После этого программа должна осуществлять вывод исходных матриц, наименования операции и результата на экран.Вопрос, куда вставить умножение матриц?
 вот код:
Код

// ConsoleApplication7.cpp: определяет точку входа для консольного приложения.
//

#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#define n 20

 int i,j;
 int nl1,nc1;
 int nl2,nc2;    
 int nl,nc;
 int mt1[n][n];
 int mt2[n][n];
 int summa[n][n];

 
void main()
{
  do {
        printf("Nomer liniy dlia mt1:");  scanf_s("%d",&nl1);
        printf("Nomer colon dlia mt1:"); scanf_s("%d",&nc1);
        
        printf("Nomer liniy dlia mt2:");  scanf_s("%d",&nl2);
        printf("Nomer colon dlia mt2:"); scanf_s("%d",&nc2);
 
        if(nc1!=nc2 && nl1!=nl2)
        {
                printf("Summa nevozmojna!");
        }
 
        else
        {
            
             system ("cls");
             printf ("(1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n \n Please select: ");
                nl=nl1=nl2;             
                nc=nc1=nc2;
             char iSelect = _getch();
             switch (iSelect)
             {
             case '1': 
               system("cls");
               for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                
               mt1[i][j]=rand();
               mt2[i][j]=rand();
                }
               printf("\nResultat:\n");
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

               _getch(); _getch();

            break;
                                            
            case '2':
              system("cls");
              for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
              if (i==j)
                mt1[i][j]=1;
              else
                mt1[i][j]=0;
                }
               printf("\nResultat:\n");
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

              _getch(); _getch();
              
            break;
                
            case '3':
              system("cls");
                printf("\nmt1:\n");
                 
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s(" %d",&mt1[i][j]);
                        }
                }
               
                printf("\nmt2:\n");
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s("%d",&mt2[i][j]);
                        }
                }
                printf("\nResultat:\n");
                 for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<=nl;i++)
                {
                        for(j=0;j<=nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

                _getch(); _getch();

                break;
                
            default: 
            printf ("\n\nBad select, try again"); 
            _getch(); _getch(); 

            break;
                                           
        _getch();
        }
     
      }
    }
while (true);
}



Это сообщение отредактировал(а) dimmon123 - 15.10.2012, 19:40
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  20:22 Найти цитируемый пост)
Вопрос, куда вставить умножение матриц?

Ну, я бы просто завёл переменную, равную 0, если нужна сумма, и не 0, если умножение:
Код

                printf("\n%s resultat:\n", doMul ? "Mul" : "Sum");
                if( doMul )
                  ... // умножаем матрицы
                else
                {
                      // складываем матрицы
                   for(i=0;i<nl;i++)
                     for(j=0;j<nc;j++)
                        res[i][j]=mt1[i][j]+mt2[i][j];
                }

Я вот сейчас задумался - а Вам действительно нужно настоящее перемножение матриц? Из серии:
Код

for( i=0; i<nl; i++)
   for( j=0; j<nc; j++)
   {
      res[i][j] = 0;
      for( k = 0; k < nc; k++) res[i][j] += mt1[i][k] * mt2[k][j];
   }

а не просто перемножение элементов матрицы:
Код

for( i=0; i<nl; i++)
   for( j=0; j<nc; j++)
      res[i][j] = mt1[i][j] * mt2[i][j];

Тогда матрицы обязаны быть квадратными (чтобы их можно было и умножать и складывать)...

PS 
Цитата(dimmon123 @  15.10.2012,  20:22 Найти цитируемый пост)
                 for(i=0;i<=nl;i++)

Если отсчёт начинается с 0, то заканчиваться должен на (nl-1), то есть
Код

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

А то матрица 2x2 превратится в 3x3...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



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

 результат 3 задания я синул, вот 4 задание: Модифицировать программу из предыдущего задания так, чтобы после заполнения 2х матриц пользователя спрашивали, желает ли он выполнить умножение или сложение матриц и выполнялась выбранная пльзователем операция. После этого программа должна осуществлять вывод исходных матриц, наименования операции и результата на экран.

я что то не так сделал перед тем как 4 задание выполнить?
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  21:24 Найти цитируемый пост)
я что то не так сделал перед тем как 4 задание выполнить? 

Ну, кроме
Цитата(feodorv @  15.10.2012,  21:13 Найти цитируемый пост)
Цитата(dimmon123 @  15.10.2012,  20:22 Найти цитируемый пост)
                 for(i=0;i<=nl;i++)

Если отсчёт начинается с 0, то заканчиваться должен на (nl-1), то есть
Выделить всёкод C++
1:
    
for(i=0;i<nl;i++)

А то матрица 2x2 превратится в 3x3... 

нет, всё так.

Просто в уме уже стоит держать 5-ый пункт... И для квадратных матриц нужна одна единственная размерность, вместо четырёх...

Это сообщение отредактировал(а) feodorv - 15.10.2012, 21:03


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Цитата(feodorv @  15.10.2012,  21:00 Найти цитируемый пост)
Просто в уме уже стоит держать 5-ый пункт... И для квадратных матриц нужна одна единственная размерность, вместо четырёх...

не понял?

вот так прально поменял?надо и nl и nc сделать не <=, а просто <?
Код

// ConsoleApplication7.cpp: определяет точку входа для консольного приложения.
//

#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#define n 20

 int i,j;
 int nl1,nc1;
 int nl2,nc2;    
 int nl,nc;
 int mt1[n][n];
 int mt2[n][n];
 int summa[n][n];

 
void main()
{
  do {
        printf("Nomer liniy dlia mt1:");  scanf_s("%d",&nl1);
        printf("Nomer colon dlia mt1:"); scanf_s("%d",&nc1);
        
        printf("Nomer liniy dlia mt2:");  scanf_s("%d",&nl2);
        printf("Nomer colon dlia mt2:"); scanf_s("%d",&nc2);
 
        if(nc1!=nc2 && nl1!=nl2)
        {
                printf("Summa nevozmojna!");
        }
 
        else
        {
            
             system ("cls");
             printf ("(1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n \n Please select: ");
                nl=nl1=nl2;             
                nc=nc1=nc2;
             char iSelect = _getch();
             switch (iSelect)
             {
             case '1': 
               system("cls");
               for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                
               mt1[i][j]=rand();
               mt2[i][j]=rand();
                }
               printf("\nResultat:\n");
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

               _getch(); _getch();

            break;
                                            
            case '2':
              system("cls");
              for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
              if (i==j)
                mt1[i][j]=1;
              else
                mt1[i][j]=0;
                }
               printf("\nResultat:\n");
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

              _getch(); _getch();
              
            break;
                
            case '3':
              system("cls");
                printf("\nmt1:\n");
                 
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s(" %d",&mt1[i][j]);
                        }
                }
               
                printf("\nmt2:\n");
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s("%d",&mt2[i][j]);
                        }
                }
                printf("\nResultat:\n");
                 for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<nl;i++)
                {
                        for(j=0;j<nc;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

                _getch(); _getch();

                break;
                
            default: 
            printf ("\n\nBad select, try again"); 
            _getch(); _getch(); 

            break;
                                           
        _getch();
        }
     
      }
    }
while (true);
}



Это сообщение отредактировал(а) dimmon123 - 15.10.2012, 21:36
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  22:32 Найти цитируемый пост)
напиши номер строки где что заменить надо))


Смотри:
Цитата(dimmon123 @  15.10.2012,  20:22 Найти цитируемый пост)
 int nl1,nc1;
 int nl2,nc2;


Цитата(dimmon123 @  15.10.2012,  20:22 Найти цитируемый пост)
        printf("Nomer liniy dlia mt1:");  scanf_s("%d",&nl1);
        printf("Nomer colon dlia mt1:"); scanf_s("%d",&nc1);
        
        printf("Nomer liniy dlia mt2:");  scanf_s("%d",&nl2);
        printf("Nomer colon dlia mt2:"); scanf_s("%d",&nc2);


Если матрицы квадратные, то нужна одна переменная (назовём её dim):
Код

int dim = 0;

printf( "Please, enter matrix dimention:" );  scanf_s( "%d", &dim);
if( dim <= 0 || dim > n ) 
{
   printf( "Invalid value %d\n", dim);
   continue;
}
nl1 = nc1 = nl2 = nc2 = dim; // лучше совсем избавиться от переменных nl1, nc1, nl2, nc2



Цитата(dimmon123 @  15.10.2012,  20:22 Найти цитируемый пост)
                for(i=0;i<=nl;i++)

Везде в форах нужно поменять <= на просто <.


Ты так и не сказал, как матрицы перемножать нужно...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Ты так и не сказал, как матрицы перемножать нужно...

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

 вот исправил код на одну переменную, так как матрица квадратная:
Код

// ConsoleApplication7.cpp: определяет точку входа для консольного приложения.
//

#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#define n 20

 int i,j;
 int dim = 0;
 int mt1[n][n];
 int mt2[n][n];
 int summa[n][n];

 
void main()
{
  do {
         printf( "Please, enter matrix dimension:" );  scanf_s( "%d", &dim);
         if( dim <= 0 || dim > n ) 
          {
             printf( "Invalid value %d\n", dim);
              continue;
          }
          
       else
        {
            
             system ("cls");
             printf ("(1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n \n Please select: ");
                
             char iSelect = _getch();
             switch (iSelect)
             {
             case '1': 
               system("cls");
               for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                
               mt1[i][j]=rand();
               mt2[i][j]=rand();
                }
               printf("\nResultat:\n");
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

               _getch(); _getch();

            break;
                                            
            case '2':
              system("cls");
              for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
              if (i==j)
                mt1[i][j]=1;
              else
                mt1[i][j]=0;
                }
               printf("\nResultat:\n");
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

              _getch(); _getch();
              
            break;
                
            case '3':
              system("cls");
                printf("\nmt1:\n");
                 
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s(" %d",&mt1[i][j]);
                        }
                }
               
                printf("\nmt2:\n");
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s("%d",&mt2[i][j]);
                        }
                }
                printf("\nResultat:\n");
                 for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

                _getch(); _getch();

                break;
                
            default: 
            printf ("\n\nBad select, try again"); 
            _getch(); _getch(); 

            break;
                                           
        _getch();
        }
     
      }
    }
while (true);
}



Это сообщение отредактировал(а) dimmon123 - 15.10.2012, 22:13
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 22:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  22:57 Найти цитируемый пост)
модифицировать программу из предыдущего задания так, чтобы после заполнения 2х матриц пользователя спрашивали, желает ли он выполнить умножение или сложение матриц и выполнялась выбранная пльзователем операция. После этого программа должна осуществлять вывод исходных матриц, наименования операции и результата на экран

Ну тогда стОит разбить программу на такие блоки:
Код

цикл
  * вопрос о размерности
  * вопрос о заполнении матрицы (случайно, диагонально, с клавиатуры)
  * заполнение матриц в зависимости от выбора пользователя
  * вопрос об операции с матрицами (сложение, вычитание)
  * выполнение операций над матрицами в зависимости от выбора пользователя
  * печать матриц
  * печать операции и результата
в начало цикла


Цитата(dimmon123 @  15.10.2012,  22:57 Найти цитируемый пост)
в задании не указано как перемножать нужно

Значит, обычным для матриц способом - строка одной на столбец другой)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 15.10.2012, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Цитата(feodorv @  15.10.2012,  22:32 Найти цитируемый пост)
Значит, обычным для матриц способом - строка одной на столбец другой)))

это как в коде выглядеть будет?напиши плиз пример))завтра сделаю 4 задание и выложу на проверку, останеться еще 2 задания тут))
PM MAIL   Вверх
feodorv
Дата 15.10.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  15.10.2012,  23:39 Найти цитируемый пост)
это как в коде выглядеть будет?напиши плиз пример))

Так ведь уже писал:
Цитата(feodorv @  15.10.2012,  21:13 Найти цитируемый пост)
for( i=0; i<nl; i++)
   for( j=0; j<nc; j++)
   {
      res[i][j] = 0;
      for( k = 0; k < nc; k++) res[i][j] += mt1[i][k] * mt2[k][j];
   }


Цитата(dimmon123 @  15.10.2012,  23:39 Найти цитируемый пост)
завтра сделаю 4 задание и выложу на проверку

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


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 16.10.2012, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



Цитата(feodorv @  15.10.2012,  23:02 Найти цитируемый пост)
Ты бы их проверял, запуская программы и сравнивая результаты выполнения с тем, что должно было получиться. А то я только код оценить могу.

ну вроде все работает, а лаба будет в следующий понедельник, преподу надо будет показать самое последнее задание))
PM MAIL   Вверх
dimmon123
Дата 16.10.2012, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



feodorv, вставил в код и умножение и сложение,проверь пожалуйтса))

Код

// ConsoleApplication7.cpp: определяет точку входа для консольного приложения.
//

#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#define n 20

 int i,j,k;
 int dim = 0;
 int mt1[n][n];
 int mt2[n][n];
 int summa[n][n];
 int mult[n][n];

 
void main()
{
  do {
         printf( "Please, enter matrix dimension:" );  scanf_s( "%d", &dim);
       if( dim <= 0 || dim > n ) 
          {
             printf( "Invalid value %d\n", dim);
              continue;
          }
          
        else
          {
             system ("cls");
             printf (" (1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n \n Please select: ");
                
             char iSelect = _getch();
             switch (iSelect)
             {
             case '1': 
               system("cls");
               for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                
                 {
                  mt1[i][j]=rand();
                  mt2[i][j]=rand();
                 }
                printf("\nResultat:\n");
               }
            
             {
               system ("cls");
               printf (" (1) -  Mult\n (2) - Summa\n \n Please select: ");
                 char iSelect1 = _getch();
                 switch (iSelect1)
               { 
                 case '1': 
                 system("cls");
                 for( i=0; i<dim; i++)
                    for( j=0; j<dim; j++)
                   
                        mult[i][j] = 0;
                     for( k = 0; k < dim; k++) 
                         mult[i][j] += mt1[i][k] * mt2[k][j];
                   for(i=0;i<dim;i++)
                    {
                        for(j=0;j<dim;j++)
                        {
                              printf(" %d",mult[i][j]);
                        }
                        putchar('\n');
                    }
                   _getch(); 
                
                 break;

                 case '2': 
                 system("cls");
                    for(i=0;i<dim;i++)
                   {
                        for(j=0;j<dim;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                   }
                 for(i=0;i<dim;i++)
                  {
                        for(j=0;j<dim;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                  }
                                                
               _getch(); 
               break;

               default: 
               printf ("\n\nBad select, try again"); 
               _getch();  

               break;
                                           
               _getch();
               }
            }                        
            case '2':
              system("cls");
              for(i=0;i<dim;i++)
                {
                  for(j=0;j<dim;j++)
                  if (i==j)
                    mt1[i][j]=1;
                  else
                    mt1[i][j]=0;
                }
               printf("\nResultat:\n");
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                }
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                }

              _getch(); 
              
            break;

                
            case '3':
              system("cls");
                printf("\nmt1:\n");
                 
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s(" %d",&mt1[i][j]);
                        }
                }
               
                printf("\nmt2:\n");
                for(i=0;i<dim;i++)
                {
                        for(j=0;j<dim;j++)
                        {
                                printf("Element %d, %d:  ",i,j);
                                scanf_s("%d",&mt2[i][j]);
                        }
                }
                printf("\nResultat:\n");
                 for(i=0;i<dim;i++)
                 {
                        for(j=0;j<dim;j++)
                        {
                                summa[i][j]=mt1[i][j]+mt2[i][j];
                        }
                 }
                 for(i=0;i<dim;i++)
                 {
                        for(j=0;j<dim;j++)
                        {
                                printf(" %d",summa[i][j]);
                        }
                        putchar('\n');
                 }

                 _getch(); 

                 break;
                
            default: 
            printf ("\n\nBad select, try again"); 
            _getch();  

            break;
                                           
        _getch();
        
        }
    }
  }
 while (true);




Это сообщение отредактировал(а) dimmon123 - 16.10.2012, 12:52
PM MAIL   Вверх
feodorv
Дата 16.10.2012, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  16.10.2012,  11:29 Найти цитируемый пост)
вставил в код и умножение и сложение,проверь пожалуйтса))

Смотри, смысла держать два массива для одного результата нет. Достаточно иметь один массив - res:
Код

 if( doMult ) res = mt1 * mt2; else res = mt1 + mt2;
 print( res );

Код условный, но смысл понятный. 

Потом, ты вставил умножение матриц только в заполнение_матрицы_1, а остальные два варианта остались не у дел. Поэтому нужно сначала заполнять матрицы, потом спрашивать, что с ними делать, потом с ними делать то, что запрошено. То есть заполнение - отдельно, операция - отдельно. Порядок действий уже описан:
Цитата(feodorv @  15.10.2012,  23:32 Найти цитируемый пост)
цикл
  * вопрос о размерности
  * вопрос о заполнении матрицы (случайно, диагонально, с клавиатуры)
  * заполнение матриц в зависимости от выбора пользователя
  * вопрос об операции с матрицами (сложение, вычитание)
  * выполнение операций над матрицами в зависимости от выбора пользователя
  * печать матриц
  * печать операции и результата
в начало цикла


Приблизительно это будет выглядеть так:
Код

#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>

#define n 20

 int i,j,k;
 int dim = 0;
 int mt1[n][n];
 int mt2[n][n];
 int res[n][n];
 
void main()
{
   do 
   {
       /* вопрос о размерности */
       system ("cls");
       printf( "Please, enter matrix dimension:" );  
       scanf_s( "%d", &dim);
       if( dim <= 0 || dim > n ) 
       {
          printf( "Invalid value %d\n", dim);
          continue;
       }
 
       /* вопрос о заполнении матрицы (случайно, диагонально, с клавиатуры) */
       system ("cls");
       printf (" (1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n (4) - exit\n\n Please select: ");
       char iSelect = _getch();
       if( iSelect == '4' ) break;

       /* заполнение матриц в зависимости от выбора пользователя */
       switch( iSelect )
       {
          case '1': 
             for( i=0; i<dim; i++)
                for( j=0; j<dim; j++)
                {
                   mt1[i][j]=rand();
                   mt2[i][j]=rand();
                 }
             break;

          case '2':
             for( i=0; i<dim; i++)
                for( j=0; j<dim; j++)
                {
                   mt1[i][j] = (i == j) ? 1 : 0;
                   mt2[i][j] = (i == j) ? i : 0;
                }
             break;
                
          case '3':
              printf("\nEnter mt1:\n");
              for( i=0; i<dim; i++)
                 for( j=0; j<dim; j++)
                 {
                    printf("  Element %d, %d:  ", i, j);
                    scanf_s(" %d", &mt1[i][j]);
                 }
             
              printf("\nEnter mt2:\n");
              for( i=0; i<dim; i++)
                 for( j=0; j<dim; j++)
                 {
                    printf("  Element %d, %d:  ", i, j);
                    scanf_s( "%d", &mt2[i][j]);
                 }
                 break;
                
          default: 
             printf ("\n\nBad select, try again\n\n"); 
             _getch();  
             continue;
      }

      /* вопрос об операции с матрицами (сложение, вычитание) */
      system ("cls");
      printf (" (1) -  Mult\n (2) - Summa\n \n Please select: ");
      iSelect = _getch();

      /* выполнение операций над матрицами в зависимости от выбора пользователя */
      switch( iSelect )
      { 
         case '1': 
            system("cls");
            for( i=0; i<dim; i++)
               for( j=0; j<dim; j++)
               {    
                   res[i][j] = 0;
                   for( k = 0; k<dim; k++)  res[i][j] += mt1[i][k] * mt2[k][j];
                }
            break;

         case '2': 
            for(i=0;i<dim;i++)
               for(j=0;j<dim;j++)
                  res[i][j] = mt1[i][j] + mt2[i][j];
            break;

         default: 
            printf ("\n\nBad select, try again"); 
            _getch();  
            continue;
      }

      /* печать матриц */
      system ("cls");

      printf("mt1:\n");
      for( i=0; i<dim ;i++)
         for( j=0; j<dim; j++)
            printf( " %d", mt1[i][j]);
      printf( "\n" );

      printf("mt2:\n");
      for( i=0; i<dim ;i++)
         for( j=0; j<dim; j++)
            printf( " %d", mt2[i][j]);
      printf( "\n" );

      /* печать операции и результата */
      printf( "Operation:\n %s\n", (iSelect == '1') ? "multiplication" : "addition");

      printf( "Result:\n" );
      for( i=0; i<dim ;i++)
         for( j=0; j<dim; j++)
            printf( " %d", res[i][j]);
      printf( "\n" );
      _getch();  

   }while (true);



Как-то так  smile 


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
dimmon123
Дата 17.10.2012, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 13.10.2012

Репутация: нет
Всего: нет



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

// ConsoleApplication8.cpp: определяет точку входа для консольного приложения.
//

#include "stdio.h"
#include "stdafx.h"
#include "windows.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"

#define n 20

 int i,j,k;
 int dim = 0;
 int mt1[n][n];
 int mt2[n][n];
 int res[n][n];
 
void main()
{
   do 
   {
       /* вопрос о размерности */
       system ("cls");
       printf( "Please, enter matrix dimension:" );  
       scanf_s( "%d", &dim);
       if( dim <= 0 || dim > n ) 
       {
          printf( "Invalid value %d\n", dim);
          continue;
       }
 
       /* вопрос о заполнении матрицы (случайно, диагонально, с клавиатуры) */
       system ("cls");
       printf (" (1) - Aftozapolnenie\n (2) - Zapolnenie diagonali\n (3) - Vvod s klaviaturi\n (4) - exit\n\n Please select: ");
       char iSelect = _getch();
       if( iSelect == '4' ) break;

       /* заполнение матриц в зависимости от выбора пользователя */
       switch( iSelect )
       {
          case '1': 
             for( i=0; i<dim; i++)
                for( j=0; j<dim; j++)
                {
                   mt1[i][j]=rand();
                   mt2[i][j]=rand();
                 }
             break;

          case '2':
             for( i=0; i<dim; i++)
                for( j=0; j<dim; j++)
                {
                   if (i==j)
                    mt1[i][j]=1;
                  else
                    mt1[i][j]=0;
                   if (i==j)
                    mt2[i][j]=1;
                  else
                    mt2[i][j]=0;
                }
             break;
                
          case '3':
              printf("\nEnter mt1:\n");
              for( i=0; i<dim; i++)
                 for( j=0; j<dim; j++)
                 {
                    printf("  Element %d, %d:  ", i, j);
                    scanf_s(" %d", &mt1[i][j]);
                 }
             
              printf("\nEnter mt2:\n");
              for( i=0; i<dim; i++)
                 for( j=0; j<dim; j++)
                 {
                    printf("  Element %d, %d:  ", i, j);
                    scanf_s( "%d", &mt2[i][j]);
                 }
                 break;
                
          default: 
             printf ("\n\nBad select, try again\n\n"); 
             _getch();  
             continue;
      }

      /* вопрос об операции с матрицами (сложение, вычитание) */
      system ("cls");
      printf (" (1) -  Mult\n (2) - Summa\n \n Please select: ");
      iSelect = _getch();

      /* выполнение операций над матрицами в зависимости от выбора пользователя */
      switch( iSelect )
      { 
         case '1':             
            for( i=0; i<dim; i++)
               for( j=0; j<dim; j++)
               {    
                   //res[i][j] = 0;
                   for( k = 0; k<dim; k++)  res[i][j] += mt1[i][k] * mt2[k][j];
                }
            break;

         case '2': 
            for(i=0;i<dim;i++)
               for(j=0;j<dim;j++)
                  res[i][j] = mt1[i][j] + mt2[i][j];
            break;

         default: 
            printf ("\n\nBad select, try again"); 
            _getch();  
            continue;
      }

      /* печать матриц */
      system ("cls");

      printf("mt1:\n");
      for( i=0; i<dim ;i++)
      {
          for( j=0; j<dim; j++)
          {
            printf( " %d", mt1[i][j]);
          }
     putchar('\n');
      }

      printf("mt2:\n");
      for( i=0; i<dim ;i++)
      {
          for( j=0; j<dim; j++)
          {
            printf( " %d", mt2[i][j]);
          }
     putchar('\n');
      }

      /* печать операции и результата */
      printf( "Operation:\n %s\n", (iSelect == '1') ? "multiplication" : "addition");

      printf( "\nResult:\n" );
      for( i=0; i<dim ;i++)
      {
          for( j=0; j<dim; j++)
          {
              printf( " %d", res[i][j]);
          }
      putchar('\n');
      }
      _getch();  

   }while (true);
}

спасибо за советы!!!))осталось теперь выполнить последнее задание:  Модифицировать программу из предыдущего задания так, пользователь имел возможность при задании матриц редактировать любой элемент:пользователю задается вопрос, желает ли он редактировать матрицу. Если желает - пользователь вводит координаты редактируемого элемента и новое значение. Затем процедура повторяется. 

Это сообщение отредактировал(а) dimmon123 - 17.10.2012, 10:50
PM MAIL   Вверх
feodorv
Дата 17.10.2012, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(dimmon123 @  17.10.2012,  11:27 Найти цитируемый пост)
                   //res[i][j] = 0;

За что убита эта строчка?
Цитата(dimmon123 @  17.10.2012,  11:27 Найти цитируемый пост)
 int res[n][n];

У нас res объявлена глобально, поэтому эта матрица инициализируется нулями. А если бы мы написали так:
Код

void main()
{
   int res[n][n];
...

то в res был бы мусор. Никто не гарантирует, что Вас не попросят все объявления переменных перенести внутрь main, а если попросят, то будет сюрприз. Прошу вернуть строчку на место)))


Цитата(dimmon123 @  17.10.2012,  11:27 Найти цитируемый пост)
Модифицировать программу из предыдущего задания так, пользователь имел возможность при задании матриц редактировать любой элемент:пользователю задается вопрос, желает ли он редактировать матрицу. Если желает - пользователь вводит координаты редактируемого элемента и новое значение. Затем процедура повторяется. 

Ну что? Переставляем блоки?
Код

цикл
  * вопрос о размерности
  * вопрос о заполнении матрицы (случайно, диагонально, с клавиатуры)
  * заполнение матриц в зависимости от выбора пользователя
  цикл2
    * печать матриц
    * вопрос о редактировании матриц (1 - хочу редактировать mt1 2 - хочу редактировать mt2 3 - не хочу)
    * не хочу - уходим из цикла
    * вопрос об редактируемом элементе (координаты+значение)
    * меняем значение у mt1 или mt2
  в начало цикла 2
  * вопрос об операции с матрицами (сложение, вычитание)
  * выполнение операций над матрицами в зависимости от выбора пользователя
  * печать операции и результата
в начало цикла



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.