Diskuze: 2D array parameter

C++ C a C++ 2D array parameter

Avatar
Head
Člen
Avatar
Head:
#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <math.h>
void fillArray(double A[][5], const int N)
{
        srand(time(NULL));
        for (unsigned int i = 0; i < N;i++)
        {
                for (unsigned int j = 0; j < N;j++)
                {

                        A[i][j] = ((double)rand() / RAND_MAX) * 99.0;
                }
        }
}

void printArray(const double A[][5], const int N)
{
        for (unsigned int i = 0; i < N;i++)
        {
                for (unsigned int j = 0; j < N;j++)
                {
                        printf("%f\t", A[i][j]);
                }
                printf("\n");
        }
}

double findMax(const double A[][5], const int k, const int l)
{
        double P[9];
        int x = 0;
        double minPr = 100;
        for (int i = -1;i <= 1;i++)
        {
                for (int j = -1; j <= 1;j++)
                {
                        if ((i == 0) && (j == 0))
                        {
                                continue;
                        }
                        else
                                P[x] = fabs(A[k][l] - A[k + i][l + j]);
                        // printf("\n%f", P[x]);
                        if (minPr > P[x])
                        {
                                minPr = P[x];
                        }
                        x++;
                }

        }
        return minPr;
}



int main()
{
        const int N = 5;
        double A[N][N];

        fillArray(A, N);
        printArray(A, N);

        for (int k = 1; k < N - 1;k++)
        {
                for (int l = 1;l < N - 1;l++)
                {
                        printf("\n%f", findMax(A, k, l));
                }

        }
    return 0;
}

neviete mi niektor poradiť ako mozem zamenit ten parameter v ktorom posielam do funnkcie pole namiesto A[][5] pole s velkostou n*n?

 
Odpovědět 8.11.2015 16:43
Avatar
Jozef
Člen
Avatar
Jozef:

Vyskúšaj to predávať to ako

double **a
Nahoru Odpovědět 8.11.2015 17:32
I'm not afraid to die on a treadmill
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na Jozef
tomisoka:

Tohle u staticky alokovaného pole nepůjde, protože se nejedná o pole pointerů, ale pole polí s předem danou velikostí.

 
Nahoru Odpovědět 8.11.2015 17:55
Avatar
Head
Člen
Avatar
Odpovídá na Jozef
Head:

taže jednoduchšie ako takto tam to pole uz nanacpem? a ďalšia otazka mam to delete zapisane spravne?

// alg1test2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#include <math.h>

double **doArray(const int N)
{
        double **A = new double*[N];
        for (int i = 0; i < N; i++)
                A[i] = new double[N];
        return A;
}



void fillArray(double **A, const int N)
{
        srand(time(NULL));
        for (unsigned int i = 0; i < N;i++)
        {
                for (unsigned int j = 0; j < N;j++)
                {

                        A[i][j] = ((double)rand() / RAND_MAX) * 99.0;
                }
        }
}

void printArray(double **A, const int N)
{
        for (unsigned int i = 0; i < N;i++)
        {
                for (unsigned int j = 0; j < N;j++)
                {
                        printf("%f\t", A[i][j]);
                }
                printf("\n");
        }
}

double findMax(double **A, const int k, const int l)
{
        double sucet = 0;
        double P[9];
        int x = 0;
        double minPr = 100;
        for (int i = -1;i <= 1;i++)
        {
                for (int j = -1; j <= 1;j++)
                {
                        if ((i == 0) && (j == 0))
                        {
                                continue;
                        }
                        else
                                {
                                        P[x] = fabs(A[k][l] - A[k + i][l + j]);
                        }
                         printf("\n%f", P[x]);
                        if (minPr > P[x])
                        {
                                minPr = P[x];
                        }
                        x++;
                }

        }

        return minPr;
}

void ptAllMax(double **A, const int N)
{
        for (int k = 1; k < N - 1;k++)
        {
                for (int l = 1;l < N - 1;l++)
                {
                        printf("\nMin : %f", findMax(A, k, l));
                }

        }
}



int main()
{
        const int N = 5;

        double **A = doArray(N);

        fillArray(A, N);
        printArray(A, N);
        ptAllMax(A,N);

         delete[] A;
        return 0;
}
 
Nahoru Odpovědět 8.11.2015 18:07
Avatar
Jozef
Člen
Avatar
Odpovídá na Head
Jozef:

mám taký pocit, že delete musíš volať presne rovnaký počet krát ako voláš new. Preto by správne malo byť:

for (int i = 0; i < N; i++)
              delete[] A[i];
delete [] A
Nahoru Odpovědět 8.11.2015 18:26
I'm not afraid to die on a treadmill
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.