Η σελίδα μας αναβαθμίστηκε, γι' αυτό τον λόγο τα μέλη μας θα πρέπει να ζητήσουν νέο κωδικό πρόσβασης από την υπηρεσία "Αποστολή κωδικού πρόσβασης".
Εάν το email με τον νέο κωδικό δεν έρθει στο inbox κοιτάξτε και στο spam folder. Ο server είναι φρέσκος και δεν έχει το reputation που του αξίζει.

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

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
JinTonic
Δημοσιεύσεις: 9
Εγγραφή: 11 Ιουν 2010 15:18

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

Δημοσίευση από JinTonic » 11 Ιουν 2010 15:33

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

Κώδικας: Επιλογή όλων

#include <stdio.h>
#include <math.h>
#define ms 9 
int main&#40;int argc, char *argv&#91;&#93;&#41; &#123;
int i, j, k;
double *a, *b, *c;

a = &#40;&#40;double *&#41; malloc&#40;ms * sizeof&#40;double&#41;&#41;&#41;;
b = &#40;&#40;double *&#41; malloc&#40;ms * sizeof&#40;double&#41;&#41;&#41;;
c = &#40;&#40;double *&#41; malloc&#40;ms * sizeof&#40;double&#41;&#41;&#41;;

   /*dhmioyrgia pinaka A*/
   for &#40;i=0; i<ms; ++i&#41;
   &#123;
      for&#40;j=0; j<ms; ++j&#41;
      &#123;
         a&#91;i&#93;&#91;j&#93; = &#40;double&#41;rand&#40;&#41;/ ms;
         b&#91;i&#93;&#91;j&#93; = rand&#40;&#41; %10;
      &#125;
   &#125;

   for &#40;k=0;k<ms;k++&#41;&#123;
        i=rand&#40;&#41;%ms;
        j=rand&#40;&#41;%ms;
        a&#91;i&#93;&#91;j&#93;=k;
   &#125;
   printf&#40;"emfanish pinaka A\n"&#41;;
   for&#40;i=0; i<ms; i++&#41;
   &#123;
       j<ms; j++&#41;
         printf&#40;"%d\t", a&#91;i&#93;&#91;j&#93;&#41;;
      printf&#40;"\n"&#41;;
   &#125;

  /*dhmioyrgia pinaka B*/
  /* for &#40;i=0; i<ms; ++i&#41;
   &#123;
      for &#40;i=0; i<ms; j++&#41;
      &#123;
          b&#91;i&#93;&#91;j&#93;= rand&#40;&#41; %10;
      &#125;
   &#125;*/
   printf&#40;"emfanish pinaka B\n"&#41;;
   for&#40;i=0; i<ms; i++&#41;
   &#123;
      for&#40;j=0; j<ms; j++&#41;
      &#123;
         printf&#40;"%d\t", b&#91;i&#93;&#91;j&#93;&#41;;
      &#125;
      printf&#40;"\n"&#41;;
   &#125;

/*polaplasiasmos pinakon A*B  */
   for &#40;i = 0; i < ms; i++&#41; &#123;
      for &#40;j = 0; j < ms; j++&#41; &#123;
         c&#91;i&#93;&#91;j&#93; = 0.0;
         for &#40;k = 0; k < ms; k++&#41; &#123;
             c&#91;i&#93;&#91;j&#93; = c&#91;i&#93;&#91;j&#93; + a&#91;i&#93;&#91;k&#93; * b&#91;k&#93;&#91;j&#93;;
         &#125;
      &#125;
   &#125;

   printf&#40;"emfanish pinaka C\n"&#41;;
   for&#40;i=0; i<ms; ++i&#41;
   &#123;
      for&#40;j=0; j<ms; ++j&#41;
         printf&#40;"%3d", c&#91;i&#93;&#91;j&#93;&#41;;
      printf&#40;"\n"&#41;;
   &#125;
   &#125;
[/code]
Συνημμένα
simplemult.c
(1.34 KiB) Μεταφορτώθηκε 108 φορές

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

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

Δημοσίευση από Erevis » 11 Ιουν 2010 16:30

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

JinTonic
Δημοσιεύσεις: 9
Εγγραφή: 11 Ιουν 2010 15:18

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

Δημοσίευση από JinTonic » 11 Ιουν 2010 17:52

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

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

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

Δημοσίευση από Erevis » 11 Ιουν 2010 19:56


JinTonic
Δημοσιεύσεις: 9
Εγγραφή: 11 Ιουν 2010 15:18

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

Δημοσίευση από JinTonic » 12 Ιουν 2010 05:50

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

Κώδικας: Επιλογή όλων

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

JinTonic
Δημοσιεύσεις: 9
Εγγραφή: 11 Ιουν 2010 15:18

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

Δημοσίευση από JinTonic » 12 Ιουν 2010 09:23

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

Declaration of array and function:

Κώδικας: Επιλογή όλων

int main&#40;int argc, char *argv&#91;&#93;&#41;
&#123;
  int **a;
  void random_matrix&#40;int**&#41;;
//allocate the memory
 a = malloc&#40;ms * sizeof&#40;*a&#41;&#41;;
 a&#91;i&#93; = malloc&#40;ms * sizeof **a&#41;;


Calling the function:

Κώδικας: Επιλογή όλων

   random_matrix&#40;a&#41;;

Function looks like:

Κώδικας: Επιλογή όλων

void random_matrix&#40;int **m&#41;
&#123;
   for&#40;i=0; i<ms; i++&#41;
   &#123;
      for&#40;j=0; j<ms; j++&#41;
      &#123;
            m&#91;i&#93;&#91;j&#93; = rand&#40;&#41; %10;
            printf&#40;"%d\t", m&#91;i&#93;&#91;j&#93;&#41;;
      &#125;
      printf&#40;"\n"&#41;;
  &#125;

Erevis
Δημοσιεύσεις: 56
Εγγραφή: 12 Ιουν 2008 16:31
Τοποθεσία: Χαλάνδρι

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

Δημοσίευση από Erevis » 12 Ιουν 2010 10:06

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

Κώδικας: Επιλογή όλων


void doStuff&#40;int **array, unsigned rows, unsigned columns&#41;
&#123;
   unsigned i,j

   for&#40;i = 0; i < rows; ++i&#41;
       for&#40;j = 0; j < columns; ++j&#41;
       &#123;
            //kwdikas
       &#125;
&#125;

ώστε να περνάς το μέγεθος του πίνακα παραμετρικά. Σε αυτή τη συνάρτηση μπορείς να περάσεις μόνο δυναμικό πίνακα, αν πας να περάσεις στατικό θα χτυπήσει ο compiler, γιατί πρέπει να βλέπει τουλάχιστον το πλήθος των γραμμών ή των στηλών στο πρωτότυπο της συνάρτησης.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 2 επισκέπτες