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

προβλημα σε 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;


}

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

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

Ειναι 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
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

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

 

 

dafuq?!!

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

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);

 

 

 

 

 

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

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

Το ολο κολπο ειναι να κανεις 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);

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

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

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

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

 

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

 

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

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

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


dafuq?!!

 

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

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

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

 

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
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

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

 

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

 

 

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

κλπκλπ

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

 

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

 

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

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

 

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

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

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

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

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

κλπκλπ

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

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

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

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

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

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

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

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

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

Σύνδεση

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

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