Προς το περιεχόμενο
  • Εγγραφή
  • 0

προβλημα σε c(ασκηση καθηγητ)


aikat90

Ερώτηση

Λοιπον θελει να διαβαστουν 4 αριθμοι ακεραιοι και μετα να γινει μια ταξινομιση χωρις πινακα και επαναληψη...εχω εγω προβλημα με τις else if και δεν μου βγαζει καποια αποτελεσματα..λογικα εχω κανει καποια μπαρουφα στην δομη if kai else if...

int i1, i2, i3, i4;
int main()
{
    printf("Please type 4 numbers\n");
    scanf("%d %d %d %d", &i1, &i2, &i3, &i4);
    if (i1 < i2){
if (i2 < i3)
if (i3 < i4){
printf("The correct order is: %d,%d,%d,%d\n", i1, i2, i3, i4);}
else if(i2 < i4)
printf("The correct order is: %d,%d,%d,%d\n", i1, i2, i4, i3);

}
else if (i1 < i3){
        if(i3<i2)
            if(i2<i4)

printf("The correct order is: %d,%d,%d,%d\n", i1, i3, i2, i4);
else if (i3 < i4)
    printf("The correct order is: %d,%d,%d,%d\n",i1, i3, i4, i2);

}
else if(i1<i4){
    if(i4<i2)
            if(i2<i3){
        printf("The correct order is: %d,%d,%d,%d\n", i1, i4, i2, i3);}

            else if(i4<i3)
                printf("The correct order is: %d,%d,%d,%d\n",i1, i4, i3, i2);



    }

if(i2<i1){
    if(i1<i3){
        if(i3<i4){
                printf("The correct order is: %d,%d,%d,%d\n", i2, i1, i3, i4);
        }

        else if(i1<i4){
            printf("The correct order is: %d,%d,%d,%d\n", i2, i1, i4,i3);}

    }

else if(i2<i3){
    if(i3<i1){
        if(i1<i4){
            printf("The correct order is: %d,%d,%d,%d\n", i2, i3, i1,i4);}
            else if(i3<i4){
                printf("The correct order is: %d,%d,%d,%d\n", i2, i3 , i4, i1);}

    }
}
else if(i2<i4){
if(i4<i3){
        if(i3<i1){
            printf("The correct order is: %d,%d,%d,%d\n", i2, i4, i3, i1);}
            else if(i4<i1){
                printf("The correct order is: %d,%d,%d,%d\n", i2, i4, i1, i3);

            }
}
}
}
 if(i3<i1){
    if(i1<i2){
        if(i2<i4){
            printf("The correct order is: %d,%d,%d,%d\n", i3, i1, i2, i4);}
        else if(i1<i4){
             printf("The correct order is: %d,%d,%d,%d\n",i3, i1, i4, i2);}
}




    else if(i3<i4){
    if(i4<i1){
        if(i1<i2){
             printf("The correct order is: %d,%d,%d,%d\n", i3, i4, i1, i2);}
             else if(i4<i2){


         printf("The correct order is: %d,%d,%d,%d\n", i3, i4, i2, i1);}
    }
    }
    else if(i3<i2){
        if(i2<i4){
            if(i4<i1){
                 printf("The correct order is: %d,%d,%d,%d\n", i3, i2, i4, i1);}
            else if(i2<i1){
                 printf("The correct order is: %d,%d,%d,%d\n", i3, i2, i1, i4);}

        }
    }
    }
    if(i4<i1){
    if(i1<i2){
        if(i2<i3){
             printf("The correct order is: %d,%d,%d,%d\n", i4, i1, i2, i3);}
        else if(i1<i3){
             printf("The correct order is: %d,%d,%d,%d\n", i4, i1, i3, i2);}
    }
    else if(i4<i2){
    if(i2<i3){
        if(i3<i1){
             printf("The correct order is: %d,%d,%d,%d\n", i4, i2, i3, i1);}
        else if(i2<i1){
             printf("The correct order is: %d,%d,%d,%d\n", i4, i2, i1, i3);}
    }
    }else if(i4<i3){
    if(i3<i2){
        if(i2<i1){
             printf("The correct order is: %d,%d,%d,%d\n", i4, i3, i2, i1);}
        else if(i3<i1){
             printf("The correct order is: %d,%d,%d,%d\n", i4, i3, i1, i2);}
    }

    }
    }



    return 0;


}

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντήσεις 54
  • Δημιουργία
  • Τελευταία απάντηση

Συχνή συμμετοχή στην ερώτηση

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

  • 0

Δοκιμασε ετσι (πιο δυσκολο να κανεις λάθη)

Ειναι 1*2*3*4=24 περιπτώσεις

if(i1<=i2 && i2<=i3 &&i3<=i4)  //1 2 3 4
else if(i1<=i2 && i2<=i3 &&i4<=i3)  //1 2 4 3
....
....
else if(i4<=i3 && i3<=i2 &&i2<=i1)  //4 3 2 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

 

Λοιπον θελει να διαβαστουν 4 αριθμοι ακεραιοι και μετα να γινει μια ταξινομιση χωρις πινακα και επαναληψη...εχω εγω προβλημα με τις else if και δεν μου βγαζει καποια αποτελεσματα..λογικα εχω κανει καποια μπαρουφα στην δομη if kai else if...

 

 

dafuq?!!

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

dafuq?!!

Παρόλο που στις εκφωνήσεις των ασκήσεων προσπαθώ να βάλω αναλυτικές υποδείξεις για τις ασκήσεις, πρέπει να τονίσω ότι για καμία άσκηση δεν θα πρέπει να χρησιμοποιήσετε δομή επανάληψης (βρόχο). Το νόημα των ασκήσεων του Εργαστηρίου 1 (ειδικότερα των ασκήσεων 2 και 3) είναι να κατανοήσετε την ανάγκη αυτών των δομών, προγραμματίζοντας χωρίς εντολές while, do, for.

ετσι ειπε :P

 

 

 

Δοκιμασε ετσι (πιο δυσκολο να κανεις λάθη)

Ειναι 1*2*3*4=24 περιπτώσεις

if(i1<=i2 && i2<=i3 &&i3<=i4)  //1 2 3 4
else if(i1<=i2 && i2<=i3 &&i4<=i3)  //1 2 4 3
....
....
else if(i4<=i3 && i3<=i2 &&i2<=i1)  //4 3 2 1

το εφτιαξα απλα εχεις ενα μικρο λαθος ειναι ετσι

if(i1<=i2 && i2<=i3 &&i3<=i4)
printf("The correct order is: %d,%d,%d,%d\n",i1, i2, i3, i4);
else if(i1<=i2 && i2<=i3 &&i2<=i4)
printf("The correct order is: %d,%d,%d,%d\n", i1, i2 , i4, i3);
.
.
.
.
else if(i4<=i3 && i3<=i2 && i2<=i1)
printf("The correct order is: %d,%d,%d,%d\n", i4, i3, i2, i1);
else if(i4<=i3 && i3<=i2 && i3<=i1)
printf("The correct order is: %d,%d,%d,%d\n", i4, i3, i1, i2);

 

 

 

 

 

εδιτ: Ευχαριστω!!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

Το ολο κολπο ειναι να κανεις swap (οπως κανει ο παπι) κι οχι να παρεις τα δυναμοσυνολα με τις if-else

Εξηγω:

int min, second, third, last, temp;

scanf("%d %d %d %d", &min, &second, &third, &last);

if (min > second)
{
    temp = min;
    min = second;
    second = temp;
}

if (min > third)
{
    temp = min;
    min = third;
    third= temp;
}
else if (second > third)
{
// antallagi third me second
}

// edw exeis 3 sugkriseis na kaneis

printf("%d %d %d %d\n", min, second, third, last);

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

Δεν ειναι τόσο απλό

Κάνεις swap το πρώτο με το δευτερο ΟΚ.

Μετα κανεις swap το πρώτο με το τρίτο (θελει swap δευτερο με νεο τρίτο πάλι)

 

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

 

Βασικα σε καθε swap πρεπει να ελεγχεις μήπως χαλάσες τα ηδη ταξινομημένα και τα ξανα-ταξινομήσεις (ξανα με swap :)  )...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

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


dafuq?!!

 

Ετσι του καπνισε του καθηγητη και θελει να τους πρηξει. χαχαχα ημαρτον ρε φιλε ακου τι πηγε και τους εβαλε χωρις πινακα λεει και χωρις επαναληψη και που θα το χρησιμοποιησουν αυτο? 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

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

 

http://en.wikipedia.org/wiki/Sorting_network

 

http://www.angelfire.com/blog/ronz/Articles/996SortingNetworks.html

 

A sorting network is an abstract mathematical model of a network of wires and comparator modules that is used to sort a sequence of numbers. Each comparator connects two wires and sorts the values by outputting the smaller value to one wire, and the larger to the other. The main difference between sorting networks and comparison sorting algorithms is that with a sorting network the sequence of comparisons is set in advance, regardless of the outcome of previous comparisons. This independence of comparison sequences is useful for parallel execution of the algorithms. Despite the simplicity of the model, sorting network theory is surprisingly deep and complex.

@albNik: Όπως βλέπεις αν επιλέξεις τα ζευγάρια των συγκρίσεων σωστά δε χρειάζεται να ελέγξεις αν χάλασες τίποτα.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

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

 

http://en.wikipedia.org/wiki/Sorting_network

 

http://www.angelfire.com/blog/ronz/Articles/996SortingNetworks.html

 

 

@albNik: Όπως βλέπεις αν επιλέξεις τα ζευγάρια των συγκρίσεων σωστά δε χρειάζεται να ελέγξεις αν χάλασες τίποτα.

Πρέπει όμως να στο διδάξει κάποιος αυτό ή έστω να σε βάλει σε κάποιο δρόμο σκέψης ώστε να το ψάξεις και να το βρεις. Στους 10 που θα την λύσουν οι 9 θα έχουν τριάντα if γιατί έτσι σκέφτηκαν τη λύση. Μη σου πω ότι και ο καθηγητής έτσι θα την έχει λύσει και όχι με τον τρόπο του παπί.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

Δεν ειναι τόσο απλό

Κάνεις swap το πρώτο με το δευτερο ΟΚ.

Μετα κανεις swap το πρώτο με το τρίτο (θελει swap δευτερο με νεο τρίτο πάλι)

 

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

 

Βασικα σε καθε swap πρεπει να ελεγχεις μήπως χαλάσες τα ηδη ταξινομημένα και τα ξανα-ταξινομήσεις (ξανα με swap :)  )...

Σ'εμενα το λες; Η λογικη μου ειναι απλη

Βαζω στο α το μικροτερο απο τα α β γ δ 

ετσι το α ειναι ταξινομημενο

μετα βαζω στο β το μικροτερο απο τα β γ δ (οχι απο α εφοσον ειναι ταξινομημενο)

ετσι το α και το β ειναι ταξινομημενα

κλπκλπ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

 

if (min > second)
if (min > third)

 

Κάνεις swap το πρώτο με το δευτερο ΟΚ.

Μετα κανεις swap το πρώτο με το τρίτο (θελει swap δευτερο με νεο τρίτο πάλι)

 

Σ'εμενα το λες; Η λογικη μου ειναι απλη

Βαζω στο α το μικροτερο απο τα α β γ δ 

ετσι το α ειναι ταξινομημενο

μετα βαζω στο β το μικροτερο απο τα β γ δ (οχι απο α εφοσον ειναι ταξινομημενο)

ετσι το α και το β ειναι ταξινομημενα

κλπκλπ

Το δικό σου είναι τζαμένιο. Στον nilos πρέπει να πήγαινε το σχόλιο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

Eγω αλλαζω την θεση μου ομως , τελικα μαλλον ξερει για ποιο λογο εβαλε την ασκηση και ειναι αυτο που λεει ο παπι αποκλειεται να την κανει αυτος με 30 if και τι λογο θα ειχε να την βαλει τοτε?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 0

Πρέπει όμως να στο διδάξει κάποιος αυτό ή έστω να σε βάλει σε κάποιο δρόμο σκέψης ώστε να το ψάξεις και να το βρεις. Στους 10 που θα την λύσουν οι 9 θα έχουν τριάντα if γιατί έτσι σκέφτηκαν τη λύση. Μη σου πω ότι και ο καθηγητής έτσι θα την έχει λύσει και όχι με τον τρόπο του παπί.

 

Καλά αυτό εννοείται. Μη σου πω στους 10 οι 11 θα έχουν 30 if. Εδώ έχω εμπειρία από πρώτο χέρι που μας ζήτησαν σε εξετάσεις να γράψουμε ένα πρόγραμμα το οποίο έκανε reduce σε επίλυση συστήματος 2x2 με ακέραιους αγνώστους και συντελεστές και έβλεπα τον κόσμο να το λύνει με for δοκιμάζοντας αν τα νούμερα επιβεβαιώνουν την επιθυμητή συνθήκη και τραβούσα ο,τι προεξείχε. That said, αυτό που έκανε το παπί δε νομίζω πως είναι και rocket science.

 

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

 

Βέβαια τελικά άλλο το να μπορείς να σκεφτείς διαισθητικά να κάνεις κάτι που είναι στην ουσία ένα inefficient sorting network (και μένα αυτή ήταν η πρώτη μου σκέψη όταν πρωτοσυνάντησα το πρόβλημα) και άλλο το να ξέρεις τι έχεις στα χέρια σου και τη θεωρία του. Αυτά μόνο με διάβασμα το οποίο προαπαιτεί να ξέρεις άλλα πράγματα, οπότε δεν είναι σίγουρα για 1ο έτος. Δεν ξέρω αν σε CS σχολές στην Ελλάδα στα λένε αυτά σε κάποια φάση αλλά και να στα λένε πιθανότατα πέρασε και δεν ακούμπησε.

 

Το optimal sorting network στην προκειμένη δεν είναι το "διαισθητικό" αλλά αυτό (1 comparison λιγότερο, στο χρόνο που γλιτώνεις γίνεσαι πλούσιος με bitcoin mining): http://ideone.com/ldYWyW

 

Μπορείτε να παίξετε με την είσοδο στο stdin online για το χαβαλέ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.