Ошибка в функции

tAruuuch

Ошибка в функции
if ((m % 2 == 0) && (n % 2 == 1))
    {
        for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                {
                    k1 = z[m/2][(n+1)/2];
                    k2 = z[(m/2)+1][(n+1)/2];
                }
        cout << "Центральнi координати: " << k1 << " " << k2 << endl;
    }
при начётных n и чётных m должно вывести 2 центральные координаты, но в k2 выдает ошибку
14 ответов

tAruuuch

tAruuuch, ты зачем в индексы то полез?и да, код не полный тут в общем то ...


tAruuuch

Крюгер, я другого что-то не понял... зачем здесь циклы то?


tAruuuch

RHB, ну как бы это объяснить ^_^ .... у хохлов так принято. усложнять простые задачи


tAruuuch

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


tAruuuch

tAruuuch,


tAruuuch

Крюгер, а 2х3 а 2х4 а 4х7


tAruuuch

и о каких координатах вы говорите? давайте уже весь код в студию. и полностью задание. желательно на русском


tAruuuch

Крюгер, dynamic.h
#pragma once
 
#include <iostream>
class dynamic
{
    int         m,
                n;
 
    int         z;
public:
    dynamic();
    dynamic(int);
    dynamic(int, ******);
    dynamic(dynamic& x);
    ~dynamic();
 
    void Create(int M, int N, int Z);
    void Napus();
};
dynamic.cpp
#include "dynamic.h"
#include <string.h>
#include <iostream>
#include <cstdlib>
#include <clocale>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <ctime>
#include <iomanip>
 
using namespace std;
 
dynamic::dynamic()
{
    m=0;
    n=0;
}
 
dynamic::dynamic(dynamic& x)
{
    memcpy_s(this, sizeof(dynamic), &x, sizeof(dynamic));
}
 
void dynamic::Create(int M, int N, int Z)
{
    this->m = M;
    this->n = N;
    this->z = Z;
}
 
void dynamic::Napus()
{
    ****** k1,k2,k3,k4;
 
    srand(time(NULL));
 
    cout <<"Введите размер матрицы: " << endl;
    cin >> m; 
    cin >> n;
    
    ****** **z = new ******* [n]; 
    for (int i = 0; i < n; i++)
        z[i] = new ****** [m]; 
    
    // заполнение массива
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            z[i][j] = (rand() % 10 + 1);
 
    // вывод массива
    cout << "Наша матрица" << endl;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << setw(4) << z[i][j] << "   ";
            cout << endl;
    }
    
    if ((m % 2 == 0) && (n % 2 == 0))
    {
        k1 = z[m/2][n/2];
        k2 = z[(m/2)+1][n/2];
        k3 = z[m/2][(n/2)+1];
        k4 = z[(m/2)+1][(n/2)+1];
        cout << "Центральнi координати: " << k1 << " " << k3 << endl;
        cout << "Центральнi координати: " << k2 << " " << k4 << endl;
    }
 
    if ((m % 2 == 0) && (n % 2 == 1))
    {
        k1 = z[m/2][(n+1)/2];
        k2 = z[(m/2)+1][(n+1)/2];
        cout << "Центральнi координати: " << k1 << " " << k2 << endl;
    }
 
    if ((m % 2 == 1) && (n % 2 == 0))
    {
        k1 = z[(m+1)/2][n/2];
        k2 = z[(m+1)/2][(n/2)+1];
        cout << "Центральнi координати: " << k1 << " " << k2 << endl;
    }
 
    delete []z;
 
    system("pause");
}
 
dynamic::~dynamic()
{
 
}
test.cpp
#include "dynamic.h"
#include <iostream>
#include <cstdlib>
#include <Windows.h>
#include <stdio.h>
#include <conio.h>
#include <clocale>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    dynamic Dynamic;
 
    do
    {
        cout << "Виберiть один з запропонованих варiантiв" << endl;
        cout << "1. Ввести даннi" << endl;
        cout << "e. Вихiд" << endl << endl;
 
        int key = _getch ();
 
        switch (key)
        {
            case '1':   Dynamic.Napus();                break;
 
            case 'e':
            {return 0;}
            default:
                cout << "Невiрний вибiр! Натиснiть будь-яку клавiшу для продовження..." << endl;
                _getch ();
        }
 
    } while (true);
}
Крюгер, о цетральних, если матрица 4х4 то их 4 будет, если 3х4 то две, если 4х3 тоже две но уже другие если 3х3 то одна


tAruuuch

tAruuuch, скажу вам больше.у вас не совсем правильно класс организован


tAruuuch

Крюгер, можете пожайлуста указать на ошибки, + у меня в задании нужно что числа были ****** можете обяснить если вы конечно понимаете то какие и где они должны таки быть


tAruuuch

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
int main()
{
    int n,m;
    srand(time(NULL));
    n=rand()%10 +1;//còðîêè
    m=rand()%10 +1;//ñòîëáèêè
    int **mas;
    mas=new int*[n];
    for(int i=0;i<n;++i)
        mas[i]=new int[m];
    printf("strok: %2d\nstolbob: %2d\n\n", n,m);
    for (int i=0; i<n; i++)
    {
        for (int j=0; j<m; j++)
        {
            mas[i][j]=rand()%100;
            printf("%4d",mas[i][j]);
        }
        puts("\n");
    }
    if(n%2==1 && m%2==1)
        printf("Srednii element: mas[%d][%d]=%d\n", n/2, m/2, mas[n/2][m/2]); 
    else if(n%2==1 && m%2==0)
        printf("Srednii element:\nmas[%d][%d]=%d\nmas[%d][%d]=%d\n", n/2, (m-1)/2, mas[n/2][(m-1)/2], n/2, m/2, mas[n/2][m/2]);
    else if(n%2==0 && m%2==1)
        printf("Srednii element:\nmas[%d][%d]=%d\nmas[%d][%d]=%d\n", (n-1)/2, m/2, mas[(n-1)/2][m/2], n/2, m/2, mas[n/2][m/2]);
    else{
        printf("Srednii element:\n");
        printf("mas[%d][%d]=%d\n",(n-1)/2, (m-1)/2, mas[(n-1)/2][(m-1)/2]);
        printf("mas[%d][%d]=%d\n",(n-1)/2, m/2, mas[(n-1)/2][m/2]);
        printf("mas[%d][%d]=%d\n",n/2, (m-1)/2, mas[n/2][(m-1)/2]);
        printf("mas[%d][%d]=%d\n",n/2, m/2, mas[n/2][m/2]);
    }
    system("PAUSE");
    return 0;    
}
Переведите все это в класс и будбте счастливы))А класс неправильно организован в плане конструкторов(по меньшей мере).... Зачем вам их столько? Судя по коду у вас всегда срабатывает только 1.


tAruuuch

tAruuuch, числа
******
отличаются от
float
только точностью


tAruuuch

RHB, мне нужно еще сделать сюда, конструктор по умолчанию, инициализации, копирования, 2 конструктора с 3-мя елементами и 1 конструктор с 6-ю елементамиКрюгер, ну вот мне нужно использовать числа с двойной точностью где мне их надо использовать и какие float или ******RHB, и еще вы бы мне не могли помочь, а то с этим у меня очень туго , мне нужно сделать запись в файл и чтение с файла матрицы и результат


tAruuuch

tAruuuch, ну вообще то числами с двойной точностью надо массивы заполнять, а индекс массива целочисленный, и ничего более делать не нужно (float юзать не вижу смысла)
и еще вы бы мне не могли помочь, а то с этим у меня очень туго , мне нужно сделать запись в файл и чтение с файла матрицы и результат
записывай и читай в виде структуры
struct matrix{
.....
.....};
это менее трудно