NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!

Diskuze: 2D array parameter

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Head
Člen
Avatar
Head:8.11.2015 16:43
#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:8.11.2015 17:32

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
Tvůrce
Avatar
Odpovídá na Jozef
tomisoka:8.11.2015 17:55

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:8.11.2015 18:07

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:8.11.2015 18:26

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.