Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Visual C++] матрица и функции пользователя


Автор: nastyaaa 31.3.2014, 16:53
Нужно  разработать программу для работы с двумя матрицами А [4х4] и В [4х4]. Реализовать функции пользователя: ввод с клавиатуры значений матриц, вывод на экран, умножение матриц, поиск в матрице числа, заданного с клавиатуры. У меня получилось сделать  почти все, только не могу разобраться, как сделать функции пользователя так чтобы все работало вместе.
Вот  что у меня получилось.  Помогите, пожалуйста. smile 
1)
Код

#include <stdio.h>
#include <conio.h>
#define N 4
void main()
{
 int a[N][N];
 int b[N][N];
 int c[N][N];
 int i,j;
 int n,m;
 printf("vvdedite matricu%ix%i\n",N,N);
 for (i=0; i<N; i++)
 {
  printf("element %i-ryadka:\n",i+1);
  for (j=0; j<N; j++)
  {
   scanf("%i", &a[i][j]);
  }
 }
 printf("\n persha matrica \n");
 for(i=0; i<N; i++)
 {
  for(j=0; j<N; j++)
  {
   printf("%4i",a[i][j]);
  }
  printf("\n");
 }
 printf("vvdedite matricu%ix%i\n",N,N);
 for (j=0; j<N; j++)
 {
  printf("element %i-ryadka:\n",j+1);
  for (i=0; i<N; i++)
  {
   scanf("%i", &b[j][i]);
  }
 }
 printf("\n druga matrica\n");
 for(j=0; j<N; j++)
 {
  for(i=0; i<N; i++)
  {
   printf("%4i",b[j][i]);
  }
  printf("\n");
 }
 for (i=0; i<N; i++)
  for (j=0; j<N; j++)
   c[i][j]=0;
 printf("\n mnojennya matric\n");
 for(i=0;i<N; i++)
 {
  for(j=0; j<N; j++)
  {
   for(m=0; m<N; m++)
   {
    c[i][j]+=a[i][m]*b[m][j];
   }
  }
 }

 printf("\n itogovaya matrica\n");
 for(i=0; i<N; i++)
 {
  for(j=0; j<N; j++)
  {
   printf("%4i",c[i][j]);
  }
  printf("\n");
 }
getch();
}
2)
Код

#include "stdafx.h"
#include "stdio.h"
#include "iostream.h"
#include "conio.h"
#include "windows.h"
#include "time.h"
#include "stdlib.h"
char* Rus(const char* text);
int main()
{
    int i,j,k,l,g,h,ches,kilk;
    int mas1 [4][4];
    int mas2 [4][4];
    int mas3 [4][4];
    cout<<Rus("zadayte elementu massuvy 1 \n");
    for (i=0;i<4;i++)
    {
        for (j=0;j<4;j++)
        {
            cin>> mas1 [i][j];
        }
    }
    cout<<Rus("zadayte elementu massuvy 2  \n");
    for (k=0;k<4;k++)
    {
        for (l=0;l<4;l++)
        {
            cin>> mas2 [k][l];
        }
    }
    kilk=0;
    cout<<Rus("zadayte chislo dlya  poshuku  \n");
    cin>>ches;
    for (i=0;i<4;i++)
    {
        for (j=0;j<4;j++)
        {
            if(mas1 [i][j]==ches)kilk=kilk+1;
        }
    }
    cout<<Rus("kilkist chisel  ")<<ches<<" = "<<kilk<<endl;
}

char bufRus[256];
char * Rus(const char* text)
{
    CharToOem(text,bufRus);
    return bufRus;
Вот, а как вместе сделать не могу понять,  да еще и реализовать функции пользователя. smile 

Автор: Guinness 1.4.2014, 07:53
Для начала было бы неплохо разбить всё это дело на функции, а не фигачить это всё в двух main`ах.

Автор: nastyaaa 1.4.2014, 19:23
Ввод

Код

void vvod(int a[N][N])
{
    printf("vvdedite matricu%ix%i\n",N,N);
    for (int i=0; i<N; i++)
    {
        printf("element %i-ryadka:\n",i+1);
            for (int j=0; j<N; j++)
                scanf("%i", &a[i][j]);
            
    }
}
Вывод

Код

void vivod(int a[N][N])
{
    for (int i=0; i<N; i++)
    {
        printf("\n");
            for (int j=0; j<N; j++)
                printf("%4i", a[i][j]);
            
    }
}
умнож
Код

void AxB(int a[N][N],int b[N][N],int c[N][N])
{
    for(imt i=0;i<N; i++)
        {
            for(int j=0; j<N; j++)
            {
                for(int m=0; m<N; m++)
                {
                    c[i][j]+=a[i][m]*b[m][j];
                }
            }
    }
}
Поиск

Код

int seach(int ches,int a[N][N])
{
    int kilk=0;
    for (int i=0;i<4;i++)
        {
        for (int j=0;j<4;j++)
            {
                if(a[i][j]==ches)
                    kilk=kilk+1;
            }
    }
return kilk;
}

Вот только  сделать меню в консоли c выбором этих функций (Оператор switch) у меня не получается.

Автор: Guinness 2.4.2014, 07:58
Я так понимаю на Си?
Код

#include <cstdio>

typedef enum
{
    MenuInputMatrix = 1,
    MenuOutputMatrix,
    MenuMultiplyMatrix,
    MenuSearchElementInMatrix,
    MenuExit,
    MenuUnknown
}
MenuItems;

MenuItems OutputMenuForUser()
{
    printf("Please choose menu item:\n");
    printf("1) Input new matrix\n");
    printf("2) Output matrix\n");
    printf("3) Multiply matrix\n");
    printf("4) Search element in matrix\n");
    printf("5) Exit\n");

    int c;
    while((c = getchar()) != '\n' && c != EOF);

    int menuItem = 0;
    // опасная вещь, но на уровне инста сойдет
    scanf("%d", &menuItem);
    return (MenuItems) menuItem;
}

int main()
{
    bool isExit = false;
    while(isExit == false)
    {
        MenuItems item = OutputMenuForUser();
        switch(item)
        {
        case MenuInputMatrix:
            printf("Processing matrix input...\n");
            break;
        case MenuOutputMatrix:
            printf("Processing matrix output...\n");
            break;
        case MenuMultiplyMatrix:
            printf("Processing matrix multiply...\n");
            break;
        case MenuSearchElementInMatrix:
            printf("Processing matrix search element...\n");
            break;
        case MenuExit:
            printf("Bye bye\n");
            isExit = true;
            break;
        default:
            printf("Unknown menu item\n");
            break;
        }
    }
    return 0;
}

Далее вместо моих printf`ов вставляешь свои функции. По хорошему вся математика у тебя должна быть в отдельном заголовочном файле. А работа с пользовательским вводом в другом, в данном случае устроит и main.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)