Diskuze: extremy v alokovane matici

C++ C a C++ extremy v alokovane matici

Avatar
hujer
Neregistrovaný
Avatar
hujer:

Ahoj.Mám alokovanou matici md x nd a potřebuji v ni najit maximum a minimum a ty dát do souboru a na obrazovku. Mám algoritmus pro naleznuti extremu dat před dealokaci? popř jak by měl vypadat takový algoritmus? Děkuji za odpověd.

//dynamicka alokace matice (2 rozmer. pole) pomoci pointeru na pointer

#include<stdio.h>
#include<conio.h> /*conio.h a tedy i getch() a kbhit() lze pouzit jen v MS-DOSu a ve Windows*/
#include<stdlib.h>
#include<math.h>
#include <time.h>

void main()
{
srand; /* Inicializace generátoru */

int i,j;

int index_i,index_j;

printf("\n\nDYN. ALOKACE matice md x nd pomoci POINTERU na POINTER .\n\n");

int md,nd;

do{//zadani poctu radku ZA BEHU PROGRAMU

printf("\nZadej pocet radku v rozmezi 1 az 20\nmd = ");
scanf("%d",&md);

}while(md<1 || md>20);

do{//zadani poctu sloupcu ZA BEHU PROGRAMU

printf("\nZadej pocet sloupcu v rozmezi 1 az 20\nnd = ");
scanf("%d",&nd);

}while(nd<1 || nd>20);

double **xd;
//alokace pameti pro vektor md pointeru, jez vyuzijeme pro alokaci jednotlivych radku

xd = (double **) malloc(mdsize­of(double));

//alokace pameti pro jednotlive radky
for(i=0;i<md;i++) xd[i] = (double *) malloc(nd*size­of(double) );

for(i=0;i<md;i++)
for(j=0;j<nd;j++)
xd[i][j]=rand()%100;

printf("\nVypis matice\n\n");
for(i=0;i<md;i++)
{
for(j=0;j<nd;j++)
printf("[%d][%d]­=%4.2lf ",i,j,xd[i][j­]=rand()%100);

printf("\n");
}

Dealokace
for(i=0;i<md;i++) free(xd[i]);
nej­prve uvonime pamet po jednotlivych radcich

free(xd); //nakonec uvolnime pamet kterou zabiral vektor md ukazatelu na jednotlive radky

getch();

}

 
Odpovědět 15.9.2013 15:57
Avatar
vitamin
Člen
Avatar
vitamin:

Mozes pouzit nieco taketo:

typedef struct{
        double max;
        double min;
} MaxMin;

MaxMin get_maxmin(double** matrix, unsigned md, unsigned nd){
        MaxMin maxmin;
        maxmin.max = maxmin.min = matrix[0][0];

        for(unsigned i=0;i<md;i++){
                for(unsigned j=0;j<nd;j++){
                        if(matrix[i][j] > maxmin.max)maxmin.max=matrix[i][j];
                        if(matrix[i][j] < maxmin.min)maxmin.min=matrix[i][j];

                }
        }

        return maxmin;
}
 
Nahoru Odpovědět 15.9.2013 16:50
Avatar
hujer
Neregistrovaný
Avatar
Odpovídá na vitamin
hujer:

Už mi to hlasí jen jednu chybu. Celý tento algoritmus jsem hodil tesne před dealokaci. k vypsání na obrazovku bude stačit jen napsat po tomto algoritmu
: printf("maxin");?

 
Nahoru Odpovědět 15.9.2013 17:38
Avatar
hujer
Neregistrovaný
Avatar
hujer:

tak porad na tu chybu nemohu prijit:-(

 
Nahoru Odpovědět 15.9.2013 22:37
Avatar
vitamin
Člen
Avatar
Odpovídá na hujer
vitamin:

Ten moj kod deklaruje strukturu MaxMin a funkciu get_maxmin. Pouziva sa takto:

MaxMin maxmin = get_maxmin(xd, md, nd);

printf("\n max = %lf, min = %lf", maxmin.max, maxmin.min);
 
Nahoru Odpovědět 15.9.2013 22:42
Avatar
feanor
Člen
Avatar
feanor:

takže jsem to doplnil a nekde tam je jeste chyba:-( už to dělam 3 dny a tady na tom jsem se zasekl nejvic.u toho maxima a minima...

//dynamicka alokace matice (2 rozmer. pole) pomoci  pointeru na pointer

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include <time.h>
#include <iostream>

void main()
{
srand((unsigned)time(NULL));    /* Inicializace generátoru */

int i,j;

int index_i,index_j;


printf("\n\nDYN. ALOKACE matice  md x nd  pomoci POINTERU na POINTER .\n\n");

int md,nd;



do{//zadani poctu radku

        printf("\nZadej pocet radku v rozmezi 1 az 20\nmd = ");
        scanf("%d",&md);

}while(md<1 || md>20);

do{//zadani poctu sloupcu

        printf("\nZadej pocet sloupcu v rozmezi 1 az 20\nnd = ");
        scanf("%d",&nd);

}while(nd<1 || nd>20);

double **xd;
//alokace pameti pro vektor md pointeru, jez vyuzijeme pro alokaci jednotlivych radku

xd = (double **) malloc(md*sizeof(double*));


 //alokace pameti pro jednotlive radky
for(i=0;i<md;i++) xd[i] = (double *) malloc(nd*sizeof(double) );

for(i=0;i<md;i++)
        for(j=0;j<nd;j++)
                xd[i][j]=rand()%100;

printf("\nVypis matice\n\n");
for(i=0;i<md;i++)
{
        for(j=0;j<nd;j++)
                printf("[%d][%d]=%4.2lf ",i,j,xd[i][j]=rand()%100);

        printf("\n");
}





typedef struct{
       double max;
       double min;
} MaxMin;

MaxMin get_maxmin(double** matrix, unsigned md, unsigned nd){
       MaxMin maxmin;
       maxmin.max = maxmin.min = matrix[0][0];

       for(unsigned i=0;i<md;i++){
               for(unsigned j=0;j<nd;j++){
                       if(matrix[i][j] > maxmin.max)maxmin.max=matrix[i][j];
                       if(matrix[i][j] < maxmin.min)maxmin.min=matrix[i][j];

               }
       }



       return maxmin;
}

printf("\n max = %lf, min = %lf", maxmin.max, maxmin.min);










//Dealokace
for(i=0;i<md;i++) free(xd[i]);//nejprve uvonime pamet po jednotlivych radcich

free(xd); //nakonec uvolnime pamet kterou zabiral vektor md ukazatelu na jednotlive radky


getch();

}
 
Nahoru Odpovědět 15.9.2013 22:56
Avatar
vitamin
Člen
Avatar
vitamin:

Ty iba deklarujes funkciu get_maxmin ale nevolas ju. Pozri si moj predchadzajuci koment, tam mas riesenie.

Inak deklaraciu funkcie get_maxmin a struktu MaxMin mozes dat aj do globalneho scopu pred funkciu main.

Editováno 15.9.2013 23:08
 
Nahoru Odpovědět 15.9.2013 23:07
Avatar
feanor
Člen
Avatar
feanor:

Děkuji. Pokusím se o to. Jsem v programování novacek a docela v tom plavu:-) takže budu chvilku přemýšlet:-)a zkoušet.

 
Nahoru Odpovědět 15.9.2013 23:12
Avatar
feanor
Člen
Avatar
feanor:

P.S.kež by se nekdo smiloval a poslal mi jak to ma byt:-)

 
Nahoru Odpovědět  -1 15.9.2013 23:16
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 9 zpráv z 9.