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

Προγράμματα σε C


teodkats

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

Δημοσ.
>
void
taksinomisi_epilogi (int C[N], int D[N])
{
 int i, j, max, temp;


 for (i = 0; i < N; i++)
   {
   
   	max=i;
     

	for (j = i + 1; j <=N; j++)
		{
  			if (C[j] > C[max])
    		        max = j;
		}

	if (i != max)
		{
  			temp = C[i];
  			C[i] = C[max];
  			C[max] = temp;

  			temp = D[i];
  			D[i] = D[max];
  			D[max] = temp;
		}
}

}

 

ΥΠΟΕΡΓΑΣΙΑ 1. α4

ο πρώτος πίνακας ταξινομείται σε φθίνουσα διάταξη (με τον αλγόριθμο ταξινόμησης με επιλογή) και να διατηρείται η αρχική αντιστοιχία των στοιχείων των δύο πινάκων (π.χ. αν στον πρώτο πίνακα το 1ο στοιχείο έχει μεταφερθεί στην 4η θέση, τότε και στον δεύτερο πίνακα το 1ο στοιχείο θα μεταφερθεί στην 4η θέση).

ΥΠΟΕΡΓΑΣΙΑ 1. β7

Εκτυπώστε μια συγκεντρωτική κατάσταση των φοιτητών, όπου θα φαίνονται οι Αριθμοί Μητρώου των φοιτητών κατά φθίνουσα σειρά και οι τελικοί βαθμοί τους στη Θ.Ε. Να χρησιμοποιήσετε τη συνάρτηση taksinomisi_epilogi()

Συγνώμη δεν κατάλαβα πως γίνεται:

Στον πρώτο πίνακα να γίνεται ταξινόμηση ενώ στο δεύτερο πίνακα όχι.

Μετά όμως την ταξινόμηση με τη συνάρτηση taksinomisi_epilogi() π.χ. ο Αριθμός Μητρώου 85 που πηρέ βαθμό 5 και ο Αριθμός Μητρώου 14 που πηρέ βαθμό 10 να μην μπερδεύονται οι βαθμοί τους μετά την ταξινόμηση μονό του Αριθμού Μητρώου.

  • Απαντ. 37
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

Αν δεις την υπορουτίνα όπως την έχω παραπάνω ταξινομεί το δεύτερο όρισμα σε αντιστοιχία με το πρώτο, αυτό άλλωστε ήταν το ζητούμενο, κοινώς μια γραμμή του στύλ taksinomish_epilogh(AΜ,ΒΑΘΜΟΙ); είναι η απάντηση.

 

Κοινώς ο δεύτερος πίνακας δεν ταξηνομείται, απλά ακολουθεί την ταξηνόμηση του πρώτου. Ίσως βοηθά το

 

>
  			temp = C[i];
  			C[i] = C[max];
  			C[max] = temp;

  			temp = D[i];
  			D[i] = D[max];
  			D[max] = temp;

 

Να γραφεί

>
temp = C[i];
temp2 = D[i];
C[i] = C[max];
D[i] = D[max];
C[max] = temp;
D[max] = temp2;

Δημοσ.
Αν δεις την υπορουτίνα όπως την έχω παραπάνω ταξινομεί το δεύτερο όρισμα σε αντιστοιχία με το πρώτο, αυτό άλλωστε ήταν το ζητούμενο, κοινώς μια γραμμή του στύλ taksinomish_epilogh(AΜ,ΒΑΘΜΟΙ); είναι η απάντηση

Ευχαριστώ για την άμεση απάντηση.

Θέλω πολύ διάβασμα, γιατί δεν την κατάλαβα καλά ακόμη. :mad:

Δημοσ.

β1. Δηλώστε τέσσερις μονοδιάστατους πίνακες 4 στοιχείων, τους ακόλουθους: ΑΜ (Αριθμός Μητρώου), Α (Βαθμός 1ης Εξέτασης), Β (Βαθμός 2ης Εξέτασης) και ΤΕ (Βαθμός Τελικής Εξέτασης).

β2. Διαβάστε τα στοιχεία των πινάκων. Εφαρμόστε αμυντικό προγραμματισμό, λαμβάνοντας υπʼ όψη ότι τα στοιχεία των πινάκων μπορούν να λαμβάνουν τις παρακάτω τιμές:

a. ΑΜ: Αριθμοί Μητρώου - Διψήφιοι φυσικοί αριθμοί. Ο ΑΜ που εισάγεται κάθε φορά να είναι μοναδικός.

Για να ελέγχω αν το ΑΜ είναι διψήφιο και κάθε φορά που εισάγεται μοναδικό έγραψα τον μπακαλίστικο πιο κάτω κώδικα και φυσικά κολλάει?? Καμία ιδέα;;

Ευχαριστώ.

>
do
{
       printf("Dose ton Arithmo Mitroou tou %d ou foititi :",i+1);
       scanf("%d",&AM[i]); 
}while(AM[i]<10||AM[i]>99||AM[0]==AM[1]||AM[2]==AM[3]||AM[0]==AM[2]||AM[0]==AM[3]); 

Δημοσ.

>

for(i=0;
   i<4;
   i++
    )
    {
         printf("Enter AM %d ->",i+1);
L1:
         scanf("%d",
         &AM[i]);

         if((AM[i]<10)||(AM[i]>99))
              {
                   printf("Renter AM %d ->",i+1);
                   goto L1;

               } /* end if */


         for(j=i-1;
             j>=0;
             j--)
              {
                    if(AM[i]==AM[j])
                       {
                             printf("Reenter AM %d ->",i+1);
                             goto L1;

                       } /* end if */

              } /* end for j */

    } /* end for i */



 

Παίζει να έχει λάθη γιατί δεν το κοίταξα καλα. Α και κάτι άλλο, το goto δεν διδάσκεται πια οπότε απεφυγέ το.

Δημοσ.

Η Υποεγρασία1 εκτός από το προβληματάκι με το ΑΜ που πρέπει να είναι μοναδικός είναι έτοιμη.:-)

>

for(i=0;
   i<4;
   i++
    )
    {
         printf("Enter AM %d ->",i+1);
L1:
         scanf("%d",
         &AM[i]);

         if((AM[i]<10)||(AM[i]>99))
              {
                   printf("Renter AM %d ->",i+1);
                   goto L1;

               } /* end if */


         for(j=i-1;
             j>=0;
             j--)
              {
                    if(AM[i]==AM[j])
                       {
                             printf("Reenter AM %d ->",i+1);
                             goto L1;

                       } /* end if */

              } /* end for j */

    } /* end for i */



 

Παίζει να έχει λάθη γιατί δεν το κοίταξα καλα. Α και κάτι άλλο, το goto δεν διδάσκεται πια οπότε απεφυγέ το.

Θα το κοιτάξω αύριο γιατί είμαι πτώμα έκλεισα 10 ώρες μπροστά στην οθόνη.

Σε ευχαριστώ η βοήθεια σου ήταν πολύ μεγάλη.

Δημοσ.

Μια ερώτηση για να μπορέσω να βοηθήσω και εγώ με την σειρά μου!Επειδή ξέρω κάποιους τρόπους ταξινόμησης πολλοί από αυτούς είναι και αποδοτικοί!Σαν έχουν δώσει κάποια φόρμα για το πώς θα είναι αυτή η ταξινόμηση επιλογής?Επειδή στο internet που έψαξα βρήκα αρκετούς αλγόριθμους αρκετά διαφοροποιημένους ο ένας με τον άλλον!Και επίσης στα ορίσματα(τουλάχιστον σε μένα όταν έχω εργασίες-εργαστήρια)δεν μας καθορίζουν ποια συγκεκριμένα ορίσματα να βάλουμε!Μας λένε ποια αλλά άμα εμείς κρίνουμε σκόπιμο μπορούμε να βάλουμε και άλλα!

Δημοσ.

Αν και δεν είναι και πολύ αποδοτικός αλλά δεν θα ασχοληθώ και πολύ μ'αυτό!Επιμένω λίγο με τα ορίσματα γιατί αυτός ο αλγόριθμος που βρίσκω περνάει και έναν ακέραιο!Το μέγεθος του πίνακα!Αν κάνω κάποιο λάθος please postαρετε τον αλγόριθμο για να μπω στο νόημα και να μην γράφω βλακείες!

Δημοσ.
Για να ελέγχω αν το ΑΜ είναι διψήφιο και κάθε φορά που εισάγεται μοναδικό έγραψα τον μπακαλίστικο πιο κάτω κώδικα και φυσικά κολλάει?? Καμία ιδέα;;

Ευχαριστώ.

>
do
{
       printf("Dose ton Arithmo Mitroou tou %d ou foititi :",i+1);
       scanf("%d",&AM[i]); 
}while(AM[i]<10||AM[i]>99||AM[0]==AM[1]||AM[2]==AM[3]||AM[0]==AM[2]||AM[0]==AM[3]); 

Γιατί να χρησιμοποιήσεις το || ανάμεσα στις επιλογές σου και να μην χρησιμοποιήσεις το &&;

A και εννοείται πως θα κολλήσει όταν θα προσπαθήσει να δώσε κάποια τιμή στο ΑΜ[1] όταν το τρέχεις για πρώτη φορά,στο ΑΜ[2] την δεύτερη κτλ!προσπάθησε να βγάλεις το ΑΜ[0] έξω από το loop!Με έλεγχο βέβαια!Θα σε διευκολύνει πολύ περισσότερο!

Δημοσ.

Γιατί να χρησιμοποιήσεις το || ανάμεσα στις επιλογές σου και να μην χρησιμοποιήσεις το &&;

Γιατί για να αποτύχει πρέπει ένα από αυτά να ισχύουν.. οπότε or όχι and..

Δημοσ.

Καλησπέρα

Βρήκα γιατί κολλάει

Κάνω αρχικοποίηση των πινάκων

int AM[4]={0,0,0,0},A[4]={0,0,0,0},B[4]={0,0,0,0},TE[4]={0,0,0,0};

και στο πρώτο έλεγχο είναι AM[0]!=AM[1] αλλά AM[2]==AM[3]=0 και δεν βγαίνει από το loop.

Να μην κάνω αρχικοποίηση;;

Δημοσ.
Καλησπέρα

Βρήκα γιατί κολλάει

Κάνω αρχικοποίηση των πινάκων

 

και στο πρώτο έλεγχο είναι AM[0]!=AM[1] αλλά AM[2]==AM[3]=0 και δεν βγαίνει από το loop.

Να μην κάνω αρχικοποίηση;;

 

Να ρωτήσω κάτι, άν ήταν πίνακας 2000 θέσεων θα κάναμε δήλωση του στύλ

 

while(AM[0]!=AM[1] || AM[2]!=AM[1] || AM[2]!=AM[3] ... AM[1999]!=AM[2000])

 

;

 

δεν νομίζω..

Δημοσ.
Να ρωτήσω κάτι, άν ήταν πίνακας 2000 θέσεων θα κάναμε δήλωση του στύλ

 

while(AM[0]!=AM[1] || AM[2]!=AM[1] || AM[2]!=AM[3] ... AM[1999]!=AM[2000])

 

;

 

δεν νομίζω..

Έχεις δίκιο δεν είναι αποδοτικός ο έλεγχος

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

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...