Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
hujer
Neregistrovaný
Avatar
hujer:15.9.2013 15:57

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:15.9.2013 16:50

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:15.9.2013 17:38

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:15.9.2013 22:37

tak porad na tu chybu nemohu prijit:-(

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

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:15.9.2013 22:56

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:15.9.2013 23:07

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:15.9.2013 23:12

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:15.9.2013 23:16

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

 
Nahoru Odpovědět
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.