Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

ΘΕΛΩ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ ΝΑ ΜΟΥ ΕΛΕΓΧΕΙ ΜΕ ΤΗΝ ΣΥΝΑΡΤΗΣΗ ΑΝ ΥΠΑΡΧΟΥΝ ΔΥΟ ΣΥΝΕΧΟΜΕΝΟΙ ΚΟΜΒΟΙ ΤΗΣ ΛΙΣΤΑΣ ΠΟΥ ΕΧΟΥΝ ΙΔΙΟ ΥΠΟΛΟΙΠΟ ΜΕ ΤΟ 7....ΔΕΝ ΜΟΥ ΔΟΥΛΕΥΕΙ ΣΩΣΤΑ ΑΝ ΚΑΠΟΙΟΣ ΞΕΡΕΙ ΑΣ ΒΟΗΘΗΣΕΙ ΕΥΧΑΡΙΣΤΩ

 

 

#include <stdio.h>
 
#include <stdlib.h>
 
 
 
struct list {
 
    int data;     
 
    struct list *next;
 
};
 
 
struct list * findConsecutiveModulo(struct list *);
 
 
struct list *insertNodeList(int v, struct list *listHead) 
 
{
 
    struct list *node;
 
    node=(struct list *)malloc(sizeof(struct list));   
 
    node->data = v;
 
    node->next = listHead;
 
    return node;
 
}
 
 
 
 
 
 
int main()
 
{
 
    int size,i,x;
    
    struct list *ptr=NULL;
    
    struct list *temp;
    
    printf("give me the size of the list:\n");
 
    scanf("%d",&size);
 
    struct list *head=NULL;
    
    printf("give me the numbers of the list:\n");
    
    
    
    for(i=0; i<size; i++)
 
    {
 
        scanf("%d",&x);
 
        head=insertNodeList(x,head);  
 
        if(i==0)
           {
               temp=head; // krataw ston temp ton prwto arithmo pou diavazw
           } 
 
 
    }
    
    
    
    ptr=findConsecutiveModulo(temp); 
    
   
     if(ptr!=NULL)
     {   
        printf("the data of the node are : %d\n\n",ptr->data);
     }
                 
    
    system("pause");
         
}
 
 
 
 
struct list * findConsecutiveModulo(struct list  *Head)
        {
            
            if(Head->next== NULL)
              {        
                      printf("there aren't data nodes with same module 7 \n\n");
                      return NULL;    
              }     
                 
           else if(Head->data % 7 ==  Head->next->data % 7) 
              {
                      printf("the  data of the nodes are %d %d\n\n",Head->data,Head->next->data);      
                      return Head;
              }
                 
           else
              {
                      findConsecutiveModulo(Head->next);
              }
        }
Δημοσ.

αυτό που παρατήρησα είναι ότι αν βρείς αυτό που ψάχνεις, σταματάς (κάνεις return), δεν θέλεις να βρείς όλα τα ζεύγη; (να τρέξεις πρώτα την αναδρομή;

Επίσης θα το υλοποιούσα με επανάληψη εγώ...

Δημοσ.

ΟΧΙ ΟΛΑ ΤΑ ΖΕΥΓΗ ΤΟΥΣ ΔΥΟ ΠΡΩΤΟΥΣ ΣΥΝΕΧΟΜΕΝΟΥΣ ΑΡΙΘΜΟΥΣ ΜΕ ΙΔΙΟ ΥΠΟΛΟΙΠΟ ΔΙΑΙΡΩΝΤΑς ΜΕ ΤΟ 7...ΕΠΙΣΗΣ Η ΑΣΚΗΣΗ ΠΡΕΠΕΙ ΝΑ ΓΙΝΕΙ <<ΑΝΑΔΡΟΜΙΚΑ>> ΓΙΑ ΑΥΤΟ ΔΕΝ ΧΡΗΣΙΜΟΠΟΙΩ WHILE

Δημοσ.

Βάλε τον κώδικα σε code tag για να διαβάζεται (Κανε επεξεργασία το αρχικό σου θέμα).

Επισης οταν λες οτι δεν σου δουλευει σωστά, σε ποιο κομμάτι εχεις πρόβλημα;

 

Τέλος μην γράφεις κεφαλαία, είναι σαν να φωνάζεις

Δημοσ.

Ειμαι σιγουρος οτι οι διαφανειες του Δελληγιαννακη φτανουν και περισσευουν. Για οσους δεν καταλαβαν μην ανησυχειτε. Καταλαβε αυτος που αρχισε το θεμα. Παρεπιπτοντως εχεις λυσει το προβλημα να ειναι μονο ακεραιος.

Δημοσ.

Πέρα από αυτά που πρότεινα και σωστά έχεις επιλέξει να τα κάνεις έτσι έχω να προτείνω απλά να βάλεις μια getchar() αντί για   system("pause"). Δεν βλέπω κάποιο πρόβλημα με το μάτι.. τι τρέχει; Τρέχει όλο; 

Δημοσ.

ΣΤΟ ΟΤΙ ΔΕ ΜΟΥ ΜΠΑΙΝΕΙ ΠΟΤΕ ΣΤΟΝ ΕΛΕΓΧΟ ΤΗΣ ΣΥΝΘΗΚΗΣ 

Ξε-πάτα το caps lock 

 

Με το παρακάτω τι ακριβώς θες να πετύχεις στον κώδικα σου; Ποια η χρησιμότητα του;

 

        if(i==0)
           {
               temp=head; // krataw ston temp ton prwto arithmo pou diavazw
           } 
Δημοσ.

 

 

Με το παρακάτω τι ακριβώς θες να πετύχεις στον κώδικα σου; Ποια η χρησιμότητα του;

        if(i==0)
           {
               temp=head; // krataw ston temp ton prwto arithmo pou diavazw
           } 

 

Αν παρατηρήσεις στην επανάληψη εισαγωγής κόμβων, επιστρέφει το νέο κόμβο στο head. Έτσι για να μην το χάσει το κρατάει στο temp. Βέβαια θα μπορούσε να το κάνει και αλλιώς. Έτσι κι αλλιώς.

 

Εγώ πάντως δε βρήκα κάποιο return για την main.

Δημοσ.

Το ερώτημα μου ήταν για να βοηθήσω τη σκέψη του και να εντοπίσει το λάθος.

 

Με το if(i==0) πρακτικά κράτα σαν τελικό αποτελεσμα στην temp μόνο το πρώτο nobe της συνδεμένης λίστας (που εχει το null). Άρα το τελικό αποτέλεσμα ειναι μόνο το πρώτο nobe, ακομα κι αν βάλει 15 στοιχεία. 

Δημοσ.

Το ερώτημα μου ήταν για να βοηθήσω τη σκέψη του και να εντοπίσει το λάθος.

 

Με το if(i==0) πρακτικά κράτα σαν τελικό αποτελεσμα στην temp μόνο το πρώτο nobe της συνδεμένης λίστας (που εχει το null). Άρα το τελικό αποτέλεσμα ειναι μόνο το πρώτο nobe, ακομα κι αν βάλει 15 στοιχεία. 

 

Σωστά. Έτσι όταν μπαίνει στην αναδρομική, ικανοποιείται κατευθείαν η πρώτη συνθήκη.

 

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

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...