freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Δεικτεσ- δυναμικοι πινακεσ


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα]      Bookmarks Tags: πίνακες Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
JinTonic


Μέλος από: 11 Ιουν 2010
Μηνύματα: 9

View users profile
ΜήνυμαΣτις: 11 Ιουν 2010 14:33    Θέμα: Δεικτεσ- δυναμικοι πινακεσ Απάντηση με παράθεση  Mark this post and the followings unread

προσπαθω να διμιουργησω πινακες δυναμικά και να κανω αναλογη δεσμευση μνημης.
αν καποιος μπορει να μου εξηγησει που εχω λαθος στον παρακατω κωδικα.
κώδικας:

#include <stdio.h>
#include <math.h>
#define ms 9
int main(int argc, char *argv[]) {
int i, j, k;
double *a, *b, *c;

a = ((double *) malloc(ms * sizeof(double)));
b = ((double *) malloc(ms * sizeof(double)));
c = ((double *) malloc(ms * sizeof(double)));

   /*dhmioyrgia pinaka A*/
   for (i=0; i<ms; ++i)
   {
      for(j=0; j<ms; ++j)
      {
         a[i][j] = (double)rand()/ ms;
         b[i][j] = rand() %10;
      }
   }

   for (k=0;k<ms;k++){
        i=rand()%ms;
        j=rand()%ms;
        a[i][j]=k;
   }
   printf("emfanish pinaka A\n");
   for(i=0; i<ms; i++)
   {
       j<ms; j++)
         printf("%d\t", a[i][j]);
      printf("\n");
   }

  /*dhmioyrgia pinaka B*/
  /* for (i=0; i<ms; ++i)
   {
      for (i=0; i<ms; j++)
      {
          b[i][j]= rand() %10;
      }
   }*/
   printf("emfanish pinaka B\n");
   for(i=0; i<ms; i++)
   {
      for(j=0; j<ms; j++)
      {
         printf("%d\t", b[i][j]);
      }
      printf("\n");
   }

/*polaplasiasmos pinakon A*B  */
   for (i = 0; i < ms; i++) {
      for (j = 0; j < ms; j++) {
         c[i][j] = 0.0;
         for (k = 0; k < ms; k++) {
             c[i][j] = c[i][j] + a[i][k] * b[k][j];
         }
      }
   }

   printf("emfanish pinaka C\n");
   for(i=0; i<ms; ++i)
   {
      for(j=0; j<ms; ++j)
         printf("%3d", c[i][j]);
      printf("\n");
   }
   }
[/code]



simplemult.c
 Description:

Download
 Filename:  simplemult.c
 Filesize:  1.34 KB
 Downloaded:  98 Time(s)

Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 11 Ιουν 2010 15:30    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Οι πίνακες a,b,c που δεσμεύεις είναι μονοδιάστατοι κι εσύ τους χειρίζεσαι ως δισδιάστατους.
JinTonic


Μέλος από: 11 Ιουν 2010
Μηνύματα: 9

View users profile
ΜήνυμαΣτις: 11 Ιουν 2010 16:52    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Πως πρέπει να τους ορισω για να είνει δισδιάστατοι?
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 11 Ιουν 2010 18:56    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

www.freestuff.gr/forums/viewtopic.php?t=49885&sid=1ba290449d874059b23e89e0caf6ad12
JinTonic


Μέλος από: 11 Ιουν 2010
Μηνύματα: 9

View users profile
ΜήνυμαΣτις: 12 Ιουν 2010 04:50    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Σε ευχαριστώ για την ανταποκριση. εκανα τισ αναλογεσ αλλαγες και δουλεψε. Τώρα θελω να δομήσω τον κώδικα με functions και δεν ξερω πως να περασω τον πινακα στο function. η λογικη μου λεει οτι θα πρεπει να περασω την διευθυνση του πινακα. ετσι ώστε η function να επιστρεφει indirectly ολο τον πινακα. δηλαδη να αλλαξει τισ τιμεσ στην θεση μνημης του πινακα C.
κώδικας:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define ms 10
int main(int argc, char *argv[])
{
int i, j, k;
int **a, **b, **c;
void multiplay_matrix(int [][], int [][], int [][]);
  a = malloc(ms * sizeof(*a));
  b = malloc(ms * sizeof(*b));
  c = malloc(ms * sizeof(*c));
  if(a != NULL||b!= NULL ||c != NULL)
 {
    for(i = 0; i < ms; i++) /* Loop through each row pointer to allocate memory for columns*/
    {
         /* Set p[i] pointer to a block of memory for 'column' number of integers */
         a[i] = malloc(ms * sizeof **a); /*Here, sizeof(**p) is same as sizeof(int) */
         b[i] = malloc(ms * sizeof **b);
         c[i] = malloc(ms * sizeof **c);
         if(a[i] == NULL ||b[i] == NULL ||c[i] == NULL)
         {
             printf("Memory allocation failed. Exiting...."); // return 1;
         }
    }
 }
else
 {
        printf("Memory allocation failed. Exiting...."); // return 1;
 }
/*feed and display the matrix A */
   printf("emfanish tyxaioy pinaka A\n");
   for(i=0; i<ms; i++)
   {
      for(j=0; j<ms; j++)
      {
         a[i][j] = rand() %10;
         printf("%d\t", a[i][j]);
      }
      printf("\n");
   }
/*feed and display the matrix B*/
   printf("emfanish tyxaioy pinaka B\n");
   for(i=0; i<ms; i++)
   {
      for(j=0; j<ms; j++)
      {
         b[i][j] = rand() %10;
         printf("%d\t", b[i][j]);
      }
      printf("\n");
   }
/*polaplasiasmos pinakon A*B */
   printf("emfanish pinaka C\n");
   multiplay_matrix(a[][], b[][], c[][]);
 return 0;
}
void multiplay_matrix(int a[][], int b[][], int c[][])
{
   int i, j, k;
   for (i = 0; i < ms; i++)
   {
      for (j = 0; j < ms; j++)
      {
          c[i][j] = 0;
          for (k = 0; k < ms; k++)
          {
              c[i][j] = c[i][j] + a[i][k] * b[k][j];
          }
          printf("%d\t", c[i][j]);
      }
      printf("\n");
   }
}
JinTonic


Μέλος από: 11 Ιουν 2010
Μηνύματα: 9

View users profile
ΜήνυμαΣτις: 12 Ιουν 2010 08:23    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Τα κατάφερα!! Ευχαριστώ για την συμπαρασταση.
και μονο η αισθηση οτι υπαρχει καποιος που μπορει να με βοηθήσει ενω εχω απελπιστεί μου δινει κουράγιο. Ευχαριστώ.
Η απαντηση δεν ειναι σε κανενα forum απο όσα ειδα.
Πως τα δυναμικά 2D array παιρνιούντε σε function.

Declaration of array and function:
κώδικας:

int main(int argc, char *argv[])
{
  int **a;
  void random_matrix(int**);
//allocate the memory
 a = malloc(ms * sizeof(*a));
 a[i] = malloc(ms * sizeof **a);


Calling the function:
κώδικας:

   random_matrix(a);

Function looks like:
κώδικας:

void random_matrix(int **m)
{
   for(i=0; i<ms; i++)
   {
      for(j=0; j<ms; j++)
      {
            m[i][j] = rand() %10;
            printf("%d\t", m[i][j]);
      }
      printf("\n");
  }
Erevis


Μέλος από: 12 Ιουν 2008
Μηνύματα: 56
Περιοχή: Χαλάνδρι
View users profile
ΜήνυμαΣτις: 12 Ιουν 2010 09:06    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Καλύτερα έτσι:

κώδικας:


void doStuff(int **array, unsigned rows, unsigned columns)
{
   unsigned i,j

   for(i = 0; i < rows; ++i)
       for(j = 0; j < columns; ++j)
       {
            //kwdikas
       }
}



ώστε να περνάς το μέγεθος του πίνακα παραμετρικά. Σε αυτή τη συνάρτηση μπορείς να περάσεις μόνο δυναμικό πίνακα, αν πας να περάσεις στατικό θα χτυπήσει ο compiler, γιατί πρέπει να βλέπει τουλάχιστον το πλήθος των γραμμών ή των στηλών στο πρωτότυπο της συνάρτησης.
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [7 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » Γλώσσες Προγραμματισμού » C, C++
Τώρα είναι 05 Δεκ 2016 18:31 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos