Ελάχιστο - Μέγιστο

Συζητήσεις σχετικές με την Delphi και την πρόγονη της Pascal

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Dalton
Δημοσιεύσεις: 58
Εγγραφή: 08 Μάιος 2012 11:14
Τοποθεσία: Αθήνα
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από Dalton » 16 Οκτ 2014 10:30

Τι πάει στραβά με αυτόν τον κώδικα? Το μέγιστο δουλεύει πάντα, ενώ το ελάχιστο πάντα δείχνει min:=0 και pos:=0 !!!!

Κώδικας: Επιλογή όλων

Program askisi_12;
        Var i,min,max,posmin,posmax:integer;
           pinakas : array[1..10] of integer;
        Begin
             for i:=1 to 10 do
                 Begin
                      Writeln('Dwse enan arithmo!');
                      Readln(pinakas[i]);
                 End;
              min:=pinakas[1];
              for i:=2 to 10 do
                  Begin
                       if &#40;pinakas&#91;i&#93;<min&#41; then
                          Begin
                               min&#58;=pinakas&#91;i&#93;;
                               posmin&#58;=i;
                          End;
                  End;
              max&#58;=pinakas&#91;1&#93;;
              for i&#58;=2 to 10 do
                  Begin
                          if &#40;pinakas&#91;i&#93;>max&#41; then
                          Begin
                               max&#58;=pinakas&#91;i&#93;;
                               posmax&#58;=i;
                          End;
                  End;
               Writeln&#40;'To mikrotero stoixeio tou pinaka einai to ',min,' kai vriskete sti thesi ',posmin&#41;;
               Writeln&#40;'To megalitero stoixeio tou pinaka einai to ',max,' kai vriskete sti thesi ',posmax&#41;;
         End.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από geomagas » 16 Οκτ 2014 10:58

Για το min=0 αποκλείεται να μην είναι σωστό. Σίγουρα απεικονίζει το μικρότερο στοιχείο του πίνακά σου, απλά τυγχάνει να είναι το 0. Δοκίμασε με άλλο σετ δεδομένων να δεις.

Για το posmin τώρα, φταίει που δεν το αρχικοποιείς. Αν το ελάχιστο στοιχείο βρίσκεται στην πρώτη θέση του πίνακα, το posmin δεν έχει πάρει τιμή (1 θα έπρεπε). Το ίδιο συμβαίνει και με το posmax: Αν το μέγιστο είναι το πρώτο στοιχείο του πίνακα, πάλι θα σου δώσει posmax=0.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από gvre » 16 Οκτ 2014 10:58

Αρχικά, σβήσε το 2ο loop και κάνε όλη τη διαδικασία στο 1ο. Για ποιο input δε δουλεύει σωστά το πρόγραμμα;
Επίσης, καλό είναι να δώσεις αρχικές τιμές στις μεταβλητές posmin, posmax. Αν το input είναι πίνακας ταξινομημένος με αύξουσα σειρά, το posmin δε θα αλλάξει ποτέ. Το ίδιο ισχύει για το posmax για πίνακα με φθίνουσα ταξινόμηση.
Τέλος, ο πιο απλός τρόπος για να κάνεις debugging είναι να τυπώνεις τις τιμές των μεταβλητών σου στο σημείο που σε ενδιαφέρει (πχ μέσα στο loop).

Άβαταρ μέλους
Dalton
Δημοσιεύσεις: 58
Εγγραφή: 08 Μάιος 2012 11:14
Τοποθεσία: Αθήνα
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από Dalton » 16 Οκτ 2014 21:19

Στην αρχή τα είχα όλα σε μία επανάληψη απλά τα έσπασα μήπως και βρω το λάθος. Δοκίμασα τα min και τα max και με 0 και με 1 και οι loopes να αρχίζουν με +1 απ τις τιμές αυτών αλλά για κάποιο λόγο όλα δουλεύουν σωστά και μόνο για το max

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από gvre » 16 Οκτ 2014 21:20

Για ποιο input δε δουλεύει σωστά το πρόγραμμα;

Άβαταρ μέλους
Dalton
Δημοσιεύσεις: 58
Εγγραφή: 08 Μάιος 2012 11:14
Τοποθεσία: Αθήνα
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από Dalton » 16 Οκτ 2014 22:18

Οποιοδήποτε!
Είτε δώσω το μικρότερο 1ο είτε το δώσω μέσα στους επόμενους 9 αριθμούς, το writeln για το min πάντα θα λέει μικρότερο 0, θέση 0.
Σε αντίθεση με το max που για οποιαδήποτε τιμή δουλεύει κανονικά!

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Ελάχιστο - Μέγιστο

Δημοσίευση από gvre » 16 Οκτ 2014 22:42

Με καρφωτές τιμές στον πίνακα παίζει κανονικά σε έναν online compiler* που δοκίμασα. Οπότε, μέσα στο loop που έχει πρόβλημα τύπωσε τις τιμές του min και του pinakas ακριβώς πριν την if και δες τι σου εμφανίζει.

* http://www.compileonline.com/compile_pascal_online.php

Απάντηση

Επιστροφή στο “Delphi, Pascal”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης