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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2012, 12:34   #1
Ekvental
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 26
По умолчанию C++. Матрицы.

Ребята, помогите кто - нибудь - я на экзамене:
Заданы 2 исходные матрицы одинаковой размерности. Количество строк в матрицах больше 1. размерность матриц определяется пользователем при выполнении проекта. Исходные матрицы расположены на первой форме. на второй форме отобразить результат. результатом являются исходные матрицы, в первой исходной матрице обнулены всё четные строки, а во второй исходной матрице - обнулены все нечетные столбцы.
Ekvental вне форума Ответить с цитированием
Старый 30.01.2012, 13:55   #2
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Что-то не понял. Данные в матрицу создаются случайными числами или заносяться пользователем.
И если формы, то тут не чистый C++, с графикой работать надо. WinAPI подойдёт?
БалаШагаЛ вне форума Ответить с цитированием
Старый 30.01.2012, 14:27   #3
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Мучаться с двумя формами не захотелось. Вот как-то так.
Код:
#include <iostream>
#include <stdio.h>
#include <time.h>
#include "windows.h"

int const ConstOneElementRectWidth=50;
int const ConstOneElementRectHeight=50;
int const ConstMatricsOtstup=50;
int Matric1X=50;
int Matric1Y=50;

int w1,h1,w2,h2;//Размер матриц

int **m1;
int **m2;

LRESULT CALLBACK WindowProc(HWND,UINT,UINT,LONG);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{
    srand(time(NULL));
    std::cout << "Ширина первой матрицы: ";
    std::cin >> w1;
    std::cout << "Высота первой матрицы: ";
    std::cin >> h1;
    std::cout << "Ширина второй матрицы: ";
    std::cin >> w2;
    std::cout << "Высота второй матрицы: ";
    std::cin >> h2;
    WNDCLASS WndClass;
    HWND hWnd;
    MSG Msg;
    WndClass.style=CS_VREDRAW|CS_HREDRAW;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
    WndClass.hInstance=hInstance;
    WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
    WndClass.hbrBackground=(HBRUSH)(LTGRAY_BRUSH);
    char szWndClassName[]="WndClassName";
    WndClass.lpszClassName=szWndClassName;
    WndClass.lpszMenuName=NULL;
    WndClass.lpfnWndProc=WindowProc;
    if (!RegisterClass(&WndClass))
    {
        MessageBox(NULL,"Window class error!","ERROR",MB_OK);
        return 0;
    }
    hWnd=CreateWindow(szWndClassName,"Programm",WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
                      NULL,NULL,hInstance,NULL);
    if (!hWnd)
    {
        MessageBox(NULL,"Create window error!","ERROR",MB_OK);
        return 0;
    }
    ShowWindow(hWnd,SW_SHOWMAXIMIZED);
    UpdateWindow(hWnd);
    while(GetMessage(&Msg,NULL,0,0))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}

LRESULT CALLBACK WindowProc(HWND hWnd,UINT Message,UINT wParam,LONG lParam)
{
    static HFONT Font;
    HDC hDC;
    PAINTSTRUCT PaintStruct;
    RECT Rect;
    char t[5];
    switch(Message)
    {
        case WM_CREATE:
        m1=new int* [h1];
        for (int i=0;i<h1;i++)
          m1[i]=new int[w1];
        m2=new int* [h2];
        for (int i=0;i<h2;i++)
          m2[i]=new int[w2];
        for (int i=0;i<h1;i++)
          for (int j=0;j<w1;j++)
            m1[i][j]=rand()%100;
        for (int i=0;i<h2;i++)
          for (int j=0;j<w2;j++)
            m2[i][j]=rand()%100;
        Font=CreateFont(20,0,0,0,400,
                        false,false,false,
                        RUSSIAN_CHARSET,
                        OUT_CHARACTER_PRECIS,
                        CLIP_CHARACTER_PRECIS,
                        ANTIALIASED_QUALITY,
                        FIXED_PITCH|FF_SWISS,
                        "Arial");
        case WM_PAINT:
        hDC=BeginPaint(hWnd,&PaintStruct);
        SelectObject(hDC,Font);
        SetBkMode(hDC,TRANSPARENT);
        Matric1X=50;
        Matric1Y=50;

Последний раз редактировалось БалаШагаЛ; 30.01.2012 в 14:31.
БалаШагаЛ вне форума Ответить с цитированием
Старый 30.01.2012, 14:28   #4
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Код:
        for (int k=0;k<2;k++)
        {
            Matric1X=50;
            Rect.top=Matric1Y;
            Rect.bottom=Rect.top+ConstOneElementRectHeight;
            for (int i=0;i<h1;i++)
            {
                Rect.left=Matric1X;
                Rect.right=Rect.left+ConstOneElementRectWidth;
                for (int j=0;j<w1;j++)
                {
                    Rect.left+=ConstOneElementRectWidth;
                    Rect.right+=ConstOneElementRectWidth;
                    if ((!k)||(i%2==1))
                      sprintf(t,"%i",m1[i][j]);
                    else
                      sprintf(t,"0");
                    DrawText(hDC,t,-1,&Rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                }
                Rect.top+=ConstOneElementRectHeight;
                Rect.bottom+=ConstOneElementRectHeight;
            }
            Matric1X=Rect.left+ConstMatricsOtstup;
            Rect.top=Matric1Y;
            Rect.bottom=Rect.top+ConstOneElementRectHeight;
            for (int i=0;i<h2;i++)
            {
                Rect.left=Matric1X;
                Rect.right=Rect.left+ConstOneElementRectWidth;
                for (int j=0;j<w2;j++)
                {
                    Rect.left+=ConstOneElementRectWidth;
                    Rect.right+=ConstOneElementRectWidth;
                    if ((!k)||(j%2==0))
                      sprintf(t,"%i",m2[i][j]);
                    else
                      sprintf(t,"0");
                    DrawText(hDC,t,-1,&Rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
                }
                Rect.top+=ConstOneElementRectHeight;
                Rect.bottom+=ConstOneElementRectHeight;
            }
            Matric1Y=Rect.top+ConstMatricsOtstup;
        }
        EndPaint(hWnd,&PaintStruct);
        return 0;
        case WM_DESTROY:
        DeleteObject(Font);
        for (int i=0;i<h1;i++)
          delete [] m1[i];
        delete [] m1;
        for (int i=0;i<h2;i++)
          delete [] m2[i];
        delete [] m2;
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
БалаШагаЛ вне форума Ответить с цитированием
Старый 04.02.2012, 16:27   #5
Ekvental
Пользователь
 
Регистрация: 26.11.2010
Сообщений: 26
По умолчанию

Спасибо большое!
Ekvental вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++.три матрицы, упорядочить строки той матрицы у которой больше нулевых строк Ирина1992 Помощь студентам 12 20.11.2011 13:01
Для матрицы 8x8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. (Задание на Си) Ислам Помощь студентам 8 20.05.2011 20:56
Процедуры - вычислить количество элементов матрицы,кратных 5 и заменить на 0 все четные элементы матрицы Ksenichka Помощь студентам 1 19.05.2011 14:38
Ф-ия, определяющая сумму строк матрицы, если на главной диагонали матрицы имеется отрицательный эл-т. Volk_xD Помощь студентам 6 05.01.2011 13:39
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19