Diskuze: 2D array parameter
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Tohle u staticky alokovaného pole nepůjde, protože se nejedná o pole pointerů, ale pole polí s předem danou velikostí.
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;
}
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
Zobrazeno 5 zpráv z 5.