[C] Άσκηση στην οποία θα ήθελα βοήθεια...

borat

Επιφανές μέλος

Ο Γιάννης.- αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 40 ετών, επαγγέλεται Μαθηματικός και μας γράφει απο Ηνωμένο Βασίλειο (Ευρώπη). Έχει γράψει 15,323 μηνύματα.
Με f9 κάνει save Γεώργιε παιδί μου. :worry:
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Εγώ ξέρω ότι κάνει compile && run! :D

Οκ, ψάξε αυτό πού είναι. :)
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

borat

Επιφανές μέλος

Ο Γιάννης.- αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 40 ετών, επαγγέλεται Μαθηματικός και μας γράφει απο Ηνωμένο Βασίλειο (Ευρώπη). Έχει γράψει 15,323 μηνύματα.



Aν λες εκεί, εκεί λέει δημιουργία και εκτέλεση, το πατάω και δε γίνεται κάτι.:(
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Bill

Επιφανές μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 10,408 μηνύματα.
Πρόσθεσε στον κώδικα σου κάτι ώστε να σταματήσεις την εκτέλεση σε κάποιο σημείο ,γιατι μπορει να τρεχει και να μην το βλεπεις.Το πιο απλο ειναι μια scanf πριν τον τερματισμό του προγραμματος σου.

Εναλλακτικά βάλε την system("PAUSE") αντί για scanf ,αλλά θα κάνεις include την <stdlib.h>

ή με τρίτο τρόπο κάνοντας χρήση breakpoints για τμηματική εκτέλεση του κώδικα.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Τελευταία επεξεργασία:

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Δεν ξέρω πώς να υλοποιήσω το εξωτερικό γινόμενο. Έχετε κάποια ιδέα;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Δεν ξέρω πώς να υλοποιήσω το εξωτερικό γινόμενο. Έχετε κάποια ιδέα;
Καλησπέρα και καλωσήρθες. :)

Θα πρέπει προφανώς να "αλγοριθμοποιήσεις" τον ορισμό του εξωτερικού γινομένου. Έχεις κάνει κάποια προσπάθεια να μας πεις πού κόλλησες; :)
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Σε ευχαριστώ για το καλωσόρισμα! Συγγνώμη για τα greeklish. Ο προβληματισμός μου είναι αν πρέπει να χρησιμοποιήσω εντολή επανάληψης ή όχι. Αν όχι θα πρέπει απλά να δίνω ένα ένα τα στοιχεία του κάθε διανύσματος και να "αλγοριθμοποιήσω" τον τύπο του εξωτερικού γινομένου, με την ορίζουσα. Είμαι σε καλό δρόμο?
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

borat

Επιφανές μέλος

Ο Γιάννης.- αυτή τη στιγμή δεν είναι συνδεδεμένος. Είναι 40 ετών, επαγγέλεται Μαθηματικός και μας γράφει απο Ηνωμένο Βασίλειο (Ευρώπη). Έχει γράψει 15,323 μηνύματα.
Ο Γιώργος απλά λέει να πάρεις τον ορισμό του εξωτερικού γινομένου και να τον ανάγεις ένα προς ένα στα βασικά του βήματα.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Γιώργος

Τιμώμενο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος. Μας γράφει απο Ελβετία (Ευρώπη). Έχει γράψει 30,791 μηνύματα.
Well.... εξαρτάται από το τι θέλεις να φτιάξεις και τι σου λέει το project. ;)

Δηλαδή, εάν θέλεις να φτιάξεις μία συνάρτηση, προφανώς και δεν χρειάζεται να βάλεις επανάληψη εκεί. Τώρα αν θέλεις να 'ναι αυτό το κυρίως πρόγραμμά σου, είτε βάζεις είτε δεν βάζεις.


Αλλά το να δίνεις τα στοιχεία και να βγάζεις βάση του τύπου τις συντεταγμένες του νέου διανύσματος... αυτό πάντα προφανώς θα το κάνεις. :)



Τι "επανάληψη" εννοείς; :hmm:
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Καλώς... Ευχαριστώ για την αντάπόκριση. Θα προσπαθήσω να υλοποιήσω την παραπάνω σκέψη που σας ανέφερα. Και θα δω... Άπλα σκέφτηκα να ζητήσω και την γνώμη σας... Ευχαριστώ και πάλι

Εννοούσα επανάληψη για την εισαγωγή των στοιχείων των διανυσμάτων... Αλλά μαλλον δεν χρειάζεται. Αναζητούσα τρόπο για την είσοδο των στοιχείων αυτών. Αλλά μπορώ να τα εισάγω ένα ένα και μετά να εφαρμόσω τον τύπο ως έχει...

Ποιες ενέργειες πρέπει να ακολουθήσω για να αντιμετώπισω το ακόλουθο λάθος κατά το compiling;

error: redefinition of ' όνομα συνάρτησης '
error: previous definition of ' όνομα συνάρτησης ' was here

Το μήνυμα αυτό μου το βγάζει για την γραμμή στην οποία ξεκινώ να γράφω το περιεχόμενο της συνάρτησης.

Εχετε κάποια ιδέα;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Bill

Επιφανές μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 10,408 μηνύματα.
Πρέπει να κοιτάξεις για διπλούς ορισμούς συναρτήσεων στα αρχεία που χρησιμοποιείς.

Για παράδειγμα, υλοποιείς ένα header (file.h) αρχείο με προτότυπα των συναρτήσεων σου και τις υλοποιείς στο .c αρχειο (file.c).
Στο file.c θα έχεις κανει include το file.h και θα υπάρχουν οι υλοποιήσεις των συναρτήσεων.
Στην συνάρτηση main που έχεις εκεί κάνεις include μόνο το file.h , αν κάνεις και το file.c προκύπτει το error που συνάντησες γιατί βρίσκει δύο φορές υλοποιημένες τις συναρτήσεις.

Και σε κώδικα για πιο κατανοητά
αρχείο file.h
PHP:
/* file.h */
/*prototypes*/

void function1(arguments);
void function2(arguments);
.
.
αρχείο file.c
PHP:
/* file.c */
/*υλοποίηση συναρτήσεων*/

#include "file.h"

void function1(arguments){
     /*body*/
     return;
}

void function2(arguments){
     /*body*/
     return;
}
.
.
Στη main σου θα κάνεις include μόνο το file.h
PHP:
/* main function */

#include "file.h"

int main(void){
   /*body*/

   return 0;
}
Aν γίνει include και το file.c ο compiler βαράει error.
PHP:
/* main function */
/*πολλαπλή δήλωση συναρτήσεων*/

#include "file.h"
#include "file.c" /*προκαλεί error */

int main(void){
   /*body*/

   return 0;
}
Πώς έχεις οργανωμένο το πρόγραμμα σου για να μπορέσουμε να δούμε τί το προκαλεί;
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Σε ευχαριστώ πάρα πολύ για την βοήθεια!!! Το έλυσα αυτό το θέμα. Μου μένουν κάποια ακόμη μικρά λαθάκια. Θα τα παλέψω...
Ευχαριστώ και πάλι !!!
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Μόλις τελείωσα με όλα τα erros. Έμεναν μόνο κάποια warnings. Και τώρα κατά το compiling μου βγάζει "undefined reference to .... " για όλες μου τις συναρτήσεις. Γιατί συμβαίνει τώρα αυτό;

Λοιπόν, έχω πρώτον ένα αρχείο, το programma.c, όπου έχω την main μου και το οποίο ξεκινά:
#include<stdio.h>
#include<stdlib.h>
#include"lib.h"

Δεύτερον, ένα αρχείο, το lib.c, όπου έχω υλοποιήσει όλες μου τις συναρτήσεις και το οποίο ξεκινά: #include"lib.h"

Kαι τέλος έχω ένα αρχείο, το lib.h, όπου έχω τα πρωτότυπα των συναρτήσεων μου.

Τι κάνω λάθος?
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Bill

Επιφανές μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 10,408 μηνύματα.
Το undefined reference είναι προβλημα.Τσέκαρε μήπως υπάρχει κάποιο ορθογραφικό λάθος στα ονόματα των συναρτήσεων σου,αν και δεν το νομίζω αφού έχεις το πρόβλημα σε όλες.

Επίσης πώς έκανες compile τα αρχεία σου;(εννοώ αν τα έκανες με κάποιο ide ή μέσω γραμμής εντολών; )
Αυτό συμβαίνει μάλλον γιατι τα αρχεία δεν γίνονται linked.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Τελευταία επεξεργασία:

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Έκανα compile στην Konsole του Κnoppix (Linux) με την εντολή "gcc programma.c" . Τι μπορώ να κάνω τώρα; Πέρα απο υπομονή...
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Bill

Επιφανές μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 10,408 μηνύματα.
Πρέπει να γίνει compile και το lib.h που έχεις.Aλλιώς τα δε μπορεί να γίνουν linked τα object αρχεία που δημιουργούνται.
gcc lib.c programma.c .
Δεν το ετρεξα γιατι ειναι πρωι και πρεπει να φύγω.Πάντως αυτός ειναι ο λόγος.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Σε ευχαριστώ !!!

Έχετε κάποια ιδέα για το πώς να αντιμετωπίσω το segmentation fault. Μου το βγάζει για όλες μου τις συναρτήσεις... Help me plz
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Bill

Επιφανές μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 10,408 μηνύματα.
Έχετε κάποια ιδέα για το πώς να αντιμετωπίσω το segmentation fault. Μου το βγάζει για όλες μου τις συναρτήσεις... Help me plz


Πακέτο.
Γι αυτή την περίπτωση δεν μας δείχνεις κάποια συνάρτηση;
Μπορεί να επιχειρείς να κάνεις προσπέλαση κάπου που δεν επιτρέπεται.Για παραδειγμα να βγεις εκτός ορίων σε ενα array.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

praktor000

Νεοφερμένος

Ο praktor000 αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 8 μηνύματα.
Αυτό είναι ένα κομμάτι από την main μου:

Code:
/*Pragmatwsi epilogis: Dimiourgia monadiaiou pinaka */
case 3: {
    /*Diavazoume poses grammes tha exei o pinakas*/
    printf("Dwse ton arithmo twn grammwn tou pinaka : \n");
    scanf("%d",&grammes);
    /*Diavazoume poses sthles tha exei o pinakas*/
    printf("Dwse ton arithmo twn sthlwn tou pinaka : \n");
    scanf("%d",&sthles);
    if (grammes==sthles)
    {
        /*Dimiourgei ena monadiaio pinaka*/
        monadiaios_pinakas(&pinakas, grammes, sthles);
    }
    else
    {
        printf("Dwsate lanthasmena dedomena - Dokimaste pali: \n");
        exit(1);
    }
    break;
        }
Και εδώ είναι 2 συναρτήσεις που χρησιμοποιώ!
Code:
/*Dimiourgei tis theseis tou pinaka*/
void make_pinaka(double ***pinaka, int grammes, int sthles)
{
    int i,j;
    if (grammes>0 && sthles>0)
    {
        *pinaka=(double **)malloc(grammes*sizeof(double*));
        for (i=0;i<grammes;i++)
        {
            pinaka[i]=(double *)malloc(sthles*sizeof(double));
        }
    }
    else
    {
        printf("Dwsate lanthasmena dedomena - Dokimaste pali");
    }
}

/*Dimiourgei ena monadiaio pinaka*/
void monadiaios_pinakas(double ***pin, int grammes, int sthles)
{
    int i, j;
    double **pinakas;
    make_pinaka(&pinakas,grammes,sthles);
    for (i=0;i<grammes;i++)
    {
        for (j=0;j<sthles;j++)
        {
            if (i==j)
            {
                pinakas[i][j]=1;
            }
        }
    }
    *pin=pinakas;
}
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Επεξεργάστηκε από συντονιστή:

Bill

Επιφανές μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος. Έχει γράψει 10,408 μηνύματα.
Για αρχή δες το παρακάτω.Γράφω που έχω κάνει αλλαγή.
PHP:
void make_pinaka(double ***pinaka, int grammes, int sthles)
{
    int i,j;
    double **temp; /*έβαλα αυτό*/

    
    if (grammes>0 && sthles>0)
    {
       temp=(double **)malloc(sizeof(double));  /*έβαλα αυτό*/

        for (i=0;i<grammes;i++)
        {
           *(temp+i)=(double *)malloc(sthles*sizeof(double));  /*έβαλα αυτό*/
        }
    }
    else
    {
        printf("Dwsate lanthasmena dedomena - Dokimaste pali");
    }
    *pinaka=temp;
}
Aν δεις δηλώνω double **temp .Το χρησιμοποιώ τοπικά και στο τέλος γίνεται εκχώρηση στον δείκτη του πίνακα που έχεις. ( *pinaka=temp; )
Λίγο που επιχείρησα να το τρέξω εκεί μου χτύπαγε segmentation fault.Για δες και έτσι και πες μου.
 

Σημείωση: Το μήνυμα αυτό γράφτηκε 15 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.

Χρήστες Βρείτε παρόμοια

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα:
    Tα παρακάτω 0 μέλη διάβασαν αυτό το θέμα:
  • Φορτώνει...
Top