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

Προβλημα σε loop ψευδοκωδικα.


nickname2016

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

Δημοσ. (επεξεργασμένο)

Θελω να φτιαξω μια λουπα που θα δινω αριθμους μεσα σε ενα διαστημα [1,100]. Καθε φορα που θα δινω αριθμους, θα υπαχει μια μεταβλητη που θα μετραει ποσες φορες εδωσα νουμερα.

Εχω φτιαξει το παρακατω:
 

ΔΕΔΟΜΕΝΑ
                 calls_numb,time_length : INTEGER;
ΑΡΧΗ
                                         /*Εισαγωγη χρονων τηλεφωνικης συνομιλιας σε secs.
                                           Καθε φορα που ο χρηστης πληκτρολογει secs, ο αριθμος
                                           των κλησεων θα αυξανεται κατα 1.
                                           Αν δωθει μη εγκυρος αριθμος, το προγραμμα εμφανιζει μηνυμα
                                           λαθους και συνεχιζει κανονικα.Δλδ βγαινει απο τη λουπα */
                  calls_numb:=0;
             
                  ΕΠΑΝΑΛΑΒΕ
                  ΤΥΠΩΣΕ ("Πληκτρολογηστε τους χρονους τηλεφωνικης συνομιλιας απο 1 εως 100                                   δευτερολεπτα", EOLN);
                  ΔΙΑΒΑΣΕ(time_length);
 
                  calls_numb:= calls_numb + 1;
                  ΜΕΧΡΙ ( (time_length < 1) OR (time_length > 100) );
 
                  ΤΥΠΩΣΕ ("Ξεφυγατε απο τον αρχικο περιορισμο! συνεχιζουμε παρακατω!", EOLN);

Το προβλημα ειναι οτι αν βαλω νουμερο ΕΝΤΟΣ διαστηματος πχ 2, δεν με παραπεμπει να ξαναδωσω αριθμο, παρα συνεχιζει κανονικα με την επομενη "ΤΥΠΩΣΕ..συνεχιζουμε παρακατω" κλπ... απο που μπαζει η λουπα? Η συνθηκη που της επιτρεπει να γινει true και να συνεχισει παρακατω(δλδ αν βαλω κατι εκτος περιορισμου), ειναι σωστη? 


EDIT:
Καθως επεξεργαζομουν λιγο το σκεπτικο, συνηδειτοποιησα οτι η time_length θα παιρνει τιμη την πρωτη φορα, μετα εστω οτι ξανα δινουμε τιμη, η αρχικη τιμη θα χαθει, οποτε θα πρεπει καπως να υπαρχει και μια "Αποθηκευτικη" μεταβλητη για να κραταμε καθε φορα τη νεα τιμη. Μηπως να εφτιαχνα εναν πινακα και μετα τη λουπα που εχω παραθεσει, να την εβαζα nested μεσα σε μια ΓΙΑ?(for)
Επεξ/σία από nickname2016
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Συχνή συμμετοχή στο θέμα

Σημασία έχει το τι αποτέλεσμα θέλεις.

 

Εσύ θες να κοιτάς αν ο αριθμός είναι εντός διαστήματος και αν ναι τότε αυξάνεις έναν μετρητή. Για όσο έχεις τιμές εντός συνθήκης θα συνεχίζεις το "μάζεμα".

Αυτό μας λέει ότι χρειάζεσαι επανάληψη που κοιτάει στην αρχή τον έλεγχο..

 

διαβάζεις την είσοδο ...

Ενώ Είσοδος εντός συνθήκης  {

αύξησε μετρητή

διαβάζεις την είσοδο ..

}

Εδώ θα φθάσεις αν η συνθήκη ΔΕΝ ισχύει

 

Συμπεράσματα:

1. Αν δωθεί από την αρχή εκτός συνθήκης είσοδος, η επανάληψη δεν θα εκτελεστεί (το μπλοκ θα το περάσμουμε από πάνω, ή όπως το λέμε θα κάνουμε skip).

2. Μπορούμε να έχουμε σε πολλές γραμμές την εντολή εισόδου..(κάποιοι κολλάνε ότι στο πρόγραμμα η είσοδος πρέπει να είναι σε μια γραμμή...και ό,τι επανάληψη κάνουμε θα έχει αυτή τη γραμμή κεντρική. Αυτό δεν ισχύει!)

 

Η συνθήκη εδώ πρέπει να λέει Χ>=1 και Χ<=100

Το ερώτημα είναι αν το .9999999999999999999999 παίζει για είσοδο και αν ναι αν θα δώσει 1 δηλαδή αν θα αυξήσει το μετρητή...

άρα μπορούμε με μια δήλωση...μετράμε ακέραια δευτερόλεπτα να γλιτώσουμε από αυτό και πάμε στο

Χ>0 και Χ<101

(ενώ αν έχουμε δεκαδικά το παραπάνω είναι λάθος, διότι δίνει τιμή ενώ δεν συμβαίνει αυτό  Χ>=1 και Χ<=100, που είναι ο στόχος)

 

Σε έφτιαξα;

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

Καλημερα φιλε μου. Ενω δοκιμασα και με "ΕΝΟΣΩ...ΕΝΩΣΩ-ΤΕΛΟΣ" οπως προτινεις πολυ σωστα, την εκανα ενναλακτικα με "ΕΠΑΝΑΛΑΒΕ-ΜΕΧΡΙ" οπως ήταν και η αρχικη μου σκεψη. Αυτο που μου φαινεται περιεργο ειναι πως τωρα δουλευει επειδη αλλαξα το ονομα της μεταβλητης calls_numb σε ενα απλο Ν...(!!!). Τωρα ο κωδικας μοιαζει καπως ετσι:
 

N:=0;
 
ΕΠΑΝΑΛΑΒΕ
        ΤΥΠΩΣΕ ("Πληκτρολογηστε τον χρονο της ", N+1, "ης τηλεφωνικης συνομιλιας απο 1 εως 10000 δευτερολεπτα", EOLN);
        ΔΙΑΒΑΣΕ(time_length);
 
        N := N + 1;
        ΜΕΧΡΙ ( (time_length < 1) OR (time_length > 10000) );
 
        ΤΥΠΩΣΕ ("Ξεφυγατε απο τον αρχικο περιορισμο! συνεχιζουμε παρακατω!", EOLN);
 
/*απο εδω και κατω τσεκαρω να δω την τιμη του N και του χρονου,δεν θα μπει στον τελικο κωδικα αυτο*/
       ΤΥΠΩΣΕ ("ΤΟ ν ειναι: ", N, EOLN); /*σωστο,  εμφανιζει ποσες φορες πατησα/εδωσα χρονους */
       ΤΥΠΩΣΕ ("ο χρονος ειναι:", time_length, EOLN);  /*αυτο που φοβομουν, κραταει την τελευταια τιμη που εδωσα και οι αλλες χανονται */ 
      ΔΙΑΒΑΣΕ(N);  /*για να μην κλεισει αποτομα το προγραμμα και δεν προλαβω να δω τις τιμες */ 

Ευχαριστω για την απαντηση, ο.τι αλλο προκυψει θα ποσταρω!! 
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Όπως το έκανες δεν υπάρχει διαφυγή από την αρχή. Δηλαδή θα πάρει ένα τουλάχιστον στοιχείο.

Για να καταλάβεις τη σκοπιμότητα. Αν η εισαγωγή πληκτρολογίου έκανε ότι και εσύ τότε το Enter θα το δέχονταν εφόσον είχε δεχθεί ένα πλήκτρο. Αν ήθελες να περάσεις κενό αλφαριθμητικό...πώς θα το έκανες;

Το πρόγραμμά σου λειτουργεί χωρίς στοιχεία;...

Όχι. Άρα αν δεν δώσω κάτι ...δεν τερμάτιζει. Και εδώ το κάτι δεν είναι το σινιάλο...αλλά απαιτεί στοιχείο και να κάνει επεξεργασία.

Κατάλαβες γιατί επιμένω.. Δεν έχει στηθεί ως πρόγραμμα, αλλά απλώς μια λειτουργία. Ως λειτουργία είναι σωστή. Ως πρόγραμμα έχει πρόβλημα. Φαντάσου να ανοίγεις κάτι και να μην έχεις τρόπο να το κλείσεις αν δεν περάσεις 100 αριθμούς..Βεβαίως στο δικό σου δεν θέλεί 100 αριθμούς, αλλά και ένας είναι πλεονασμός...και μη κατανοητός αφού δεν υπάρχει. Άρα ζητάμε δύο σινιάλα για τερματισμό χωρίς αποτέλεσμα.

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

  • 2 εβδομάδες αργότερα...

Καλημερα και χρονια πολλα!!
Θελω να ρωτησω τους εμπειροτερους το εξης:

Εχω ενα προγραμματακι να φτιαξω στο οποιο θα δινω ακεραιους απο το 1 εως το 10000. αυτα θα ειναι δευτερολεπτα κλησεων. Ο αλγοριθμος θα υπολογιζει το πληθος κλησεων ανα διαρκεια κλησης, σε λεπτα. Αν δλδ μια κληση ειναι πανω απο 60 λεπτα, τοτε η ομαδοποιηση θα γινεται ανα ωρα. Επισης θα εμφανιζεται το πληθος των κλησεων που πραγματοποιηθηκαν. (Στην ουσια εδω θα βαλουμε μια μεταβλητη και καθε φορα που παταω νουμερα, αυτη η μεταβλητη θα αυξανεται κατα 1).

Η τυπικη εξοδος θα ειναι η εξης:
 

Πραγματοποιηθηκαν Ν κλήσεις.
 

Το πληθος κλήσεων με διαρκεια 0 έως 1 λεπτα ειναι ?

Το πληθος κλησεων με διαρκεια 1 έως 2 λεπτα ειναι ?

κλπ

Θα χρησιμοποιησω αμυντικο προγραμματισμο για να σιγουρεψω οτι ο χρηστης θα δινει αριθμους μεσα σε αυτο το διαστημα. Αυτο θα το κανω με μια ΕΠΑΝΑΛΑΒΕ...ΜΕΧΡΙ. Αν φυγω εκτος διαστηματος, τοτε βγαινω απο τη λουπα. 

τωρα παμε στο σημαντικο κομματι. εκει που κολαω.

Απο αυτα που καταλαβα ειναι οτι:

θα φτιαξω εναν μονοδιαστατο πινακα με 62 θεσεις. οι 60 για τα λεπτα και οι 2 για τις 2 ωρες.(ή 2 πινακες 60 θεσεις για λεπτα, 2 θεσεις για ωρες, θα δω πως θα γινει).
το θεμα λοιπον, δεν ειναι να βαζω τους αριθμους που δινονται στον πινακα. (Μπορει να δωσω 100 κλησεις, πως θα μπουν σε 62 θεσεις?)
Το θεμα ειναι να κατηγοριοποιησω τις κλησεις στον πινακα  και μετα να αυξανω κατα 1 το πληθος τους. Δλδ εδωσα τον αριθμο 90 (90 DIV 60 = 1), οποτε θα τον βαλω στην κατηγορια 1 λεπτο και 59 δευτερολεπτα.  Στον πινακα μου αυτο ειναι το δευτερο κελι, πχ το pin[2]=1. Μετα μπορει να δωσω 91" που ειναι παλι στην ιδια κατηγορια οποτε το pin[2]=2 κλπ.. 

Και παμε στην ερωτηση τωρα!! 

Πως θα το προγραμματισω ετσι ωστε να πηγαινω να βρισκω την κατηγορια?
Δλδ αν δωσω 350, θα κανω την πραξη, θα βρω τα λεπτα, αλλα μετα πώς θα μπει πχ στο 5ο κελι?
Αν δωσω το 6000, δλδ περιπου 100 λεπτα, πως θα το βαλω στο 61ο κελι που ειναι 1 εως 2 ωρες?

Ελπιζω να διατυπωσα καθαρα το προβλημα μου και φυσικα ελπιζω να με βοηθησετε.

Δεν ζηταω λυση στο πιατο..ενα hint..Πχ κανε ταξινομηση πινακα ή κατι αλλο..


edit: προφανως και δεν θα βαλω 60 ΕΑΝ-ΑΛΛΙΩΣ ΕΑΝ..σιγουρα θα υπαρχει ενας πιο κομψος τροπος


 

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

Πίνακες αλφαριθμητικών παρέχει η ψευδόγλώσσα;

Αν ναι τότε έχεις τρόπο να δείχνεις σε επανάληψη όλες τις κατηγορίες. Αν έστω έχω 10 κατηγορίες, τότε έχω δύο πίνακες, ένας με το σύνολο κλήσεων και ένα με το όριο. Ίσως και έναν τρίτο με τα δευτερόλεπτα πλέον του ελάχιστους της κλήδη. 3ο όριο καθορίζει αν η κλήση θα πέσει στην θέση 1 ή 2. Ο δείκτης των πινάκων δεν θα έχει άμεση σχέση με τη κατηγορία, μόνο το όριο θα το δηλώνει. Σε αλφαριθμητικό θα βάζεις την επιγραφή..λεζάντα

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

Δημοσ. (επεξεργασμένο)

Απ' οσο γνωριζω, ο ψευδοcompiler προς το παρον δεν υποστηριζει δομες δεδομενων για συμβολοσειρες.

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

Βάλε πόσους κωδικούς θέλεις...Μ

Αρκλήσεων=0

Πίνακας κωδ_χρέωσης(1..Μ), όριο(1..Μ), χρόνος(1..Μ)

Όριο(Μ)=1e+20

Οριο(1) = αρχικό αριθμός διάρκειας στο 2

..... βάζεις όλα τα όρια..εδώ

 

Για κάθε κλήση

Αρκλήσεων ++

Δείκτης =1

όσο κλήση.διάρκεια > oριο(δεικτης) επανέλαβε χρόνος(δείκτης)++

Τέλος όσο

Τέλος για

Μπορείς να έχεις κωδικό χρέωσης το δείκτη, αλλά το ορθό είναι να το ξεχωρίζεις. Ο δείκτης ως κωδικός είναι Hard coded, ενώ ως έμμεσος αριθμός μπορεί να έχει και άλλες πληροφορίες. Πχ τιμοκατάλογος. Δεν το ζήταεί αλλά η ορθή πρακτική είναι να μην δίνεις και άλλη σημασία σε ένα δείκτη, εκτός από τη σειρά. Στον αλγόριθμο μπορείς να σβήσει εντελώς το πίνακα για το κωδικό.

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

10000 / 60 = 166.67

 

Άρα με ένα πίνακα 167 θέσεων (κάθε θέση αντιστοιχεί σε # ολόκληρων λεπτών της κλήσης) είσαι καλυμμένος για το input που δέχεσαι. Ο πίνακας ξεκινάει με όλα μηδενικά. Παίρνεις ένα input x (διάρκεια σε δευτερόλεπτα) και αυξάνεις κατα 1 το array[x / 60] όπου η διαίρεση είναι ακεραίων. Problem solved.

 

Το γεγονός ότι οι θέσεις 0-59 του πίνακα θα αντιστοιχίσουν σε εμφάνιση μίας γραμμής η καθεμιά, ενώ για τις θέσεις 60-119 θα σουμάρεις (πχ με ένα for) και θα πεις "από 1 ως 2 ώρες τόσες κλήσεις" δεν παίζει κανένα ρόλο. Απλά θα κρατήσεις περισσότερα δεδομένα απ' όσα σου χρειάζονται τεχνικά για να εμφανίσεις την έξοδο που θέλεις. 167 θέσεις είναι αστεία μικρό νούμερο και θα έχεις το τεράστιο πλεονέκτημα ότι ο τρόπος αποθήκευσης των δεδομένων δεν είναι σκλάβος του τρόπου εμφάνισης των δεδομένων.

 

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

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

Δημοσ. (επεξεργασμένο)

Σε απλή Μ2000...θα γράφονταν έτσι (έχω μόνο τη συνάρτηση που δίνει θέση στους πίνακες)

Ο πίνακας είναι από 1 έως και 62, οι ώρες πέφτουν στο 60-62

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

 

Συνάρτηση ΘέσηΠίνακα {
      διάβασε δευτ
      Αν δευτ δια 60 <59 τότε {
            =δευτ δια 60+1
      } αλλιώς {
             =(δευτ-1) δια 3600+60
      }
}
Τύπωσε ΘέσηΠίνακα(1), ΘέσηΠίνακα(59*60-1)
Τύπωσε ΘέσηΠίνακα(3599), ΘέσηΠίνακα(3600), ΘέσηΠίνακα(3601)
Τύπωσε ΘέσηΠίνακα(4000), ΘέσηΠίνακα(3600*2-1)
Τύπωσε ΘέσηΠίνακα(3600*2+1), ΘέσηΠίνακα(10000)

 

Το ποιο δύσκολο είναι να δει κανείς από το 59*60 έως το 60*60-1 που πηγαίνει!

θα πάει στα 59 λεπτά ή στην ώρα; Με το τρόπο παραπάνω πάω στην ώρα.

π.χ. στο ΘέσηΠίνακα(58*60+1)

θα έχουμε 59 λεπτά διότι είμαστε πάνω ένα λεπτό!

 

(άλλαξα λίγο το πρόγραμμα για να είναι οκ)


Να προσθέσω εδώ την έξοδο:

1       59

60    60    61

61   61 

62   62                        

 

60 1 ώρα (από 59 λεπτά +1 ένα δευτερόλεπτο γράφει ώρα)

61 2 ώρα

62 3 ώρα


Αυτό το πρόγραμμα έχει το ωραίο ότι αλλάζει βάζει λογισμού όταν περνάει στις ώρες. Δηλαδή χωρίζει την πρώτη ώρα σε 60 κατηγορίες..

η πρώτη όμως έχει ένα λιγότερο δευτερόλεπτο...από 1 έως 59, η δεύτερη από 60 έως 119 και η 59 έχει από 58*60 έως 59*60-1...

Που είναι η 60η, Είναι ώρα! Έτσι η πρώτη ώρα πρέπει να έχει από 59*60 έως 120*60-1, άρα 3659 δευτερόλεπτα! (τα 59 τα κερδίζουμε πριν συμπληρωθεί η πρώτη ώρα). Μετά κάθε ώρα πάει κανονικά 120*60 έως 180*60-1  (απλά εδώ πάμε μέχρι το 10000 και όχι το 10799)

Διόρθωση!

Η πρώτη ώρα βγαίνει μόνο από 60 δευτερόλεπτα..δες στο τέλος το τελικό πρόγραμμα!

Διόρθωση και στη συνάρτηση. Δείτε πως και τα δυο προγράμματα δίνουν τη ίδια απόκριση εκτός από την πρώτη γραμμή εκεί το πάνω πρόγραμμα δίνει 2  2  31 ενώ το κάτω το σωστό: 1   2     30

Παρόλα αυτά με ξεγέλασε η ορθότητα των άλλων γραμμών!

Έτσι γίνονται τα λάθη αν δεν φτιαχτεί τελικά πρόγραμμα και δεν δοκιμαστεί στη πράξη (όπως αυτό που δείχνω στη τελευταία ανάρτηση)

 

Συνάρτηση ΘέσηΠίνακα {
      διάβασε δευτ
      Αν (δευτ-1) δια 60 <59 τότε {
            =(δευτ-1) δια 60+1
      } αλλιώς {
             =(δευτ-1) δια 3600+60
      }
}
Τύπωσε ΘέσηΠίνακα(60), ΘέσηΠίνακα(61), ΘέσηΠίνακα(1800)
Τύπωσε ΘέσηΠίνακα(1), ΘέσηΠίνακα(59*60-1)
Τύπωσε ΘέσηΠίνακα(3599), ΘέσηΠίνακα(3600), ΘέσηΠίνακα(3601)
Τύπωσε ΘέσηΠίνακα(4000), ΘέσηΠίνακα(3600*2-1)
Τύπωσε ΘέσηΠίνακα(3600*2+1), ΘέσηΠίνακα(10000)

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

10000 / 60 = 166.67

 

Άρα με ένα πίνακα 167 θέσεων (κάθε θέση αντιστοιχεί σε # ολόκληρων λεπτών της κλήσης) είσαι καλυμμένος για το input που δέχεσαι. Ο πίνακας ξεκινάει με όλα μηδενικά. Παίρνεις ένα input x (διάρκεια σε δευτερόλεπτα) και αυξάνεις κατα 1 το array[x / 60] όπου η διαίρεση είναι ακεραίων. Problem solved.

 

Το γεγονός ότι οι θέσεις 0-59 του πίνακα θα αντιστοιχίσουν σε εμφάνιση μίας γραμμής η καθεμιά, ενώ για τις θέσεις 60-119 θα σουμάρεις (πχ με ένα for) και θα πεις "από 1 ως 2 ώρες τόσες κλήσεις" δεν παίζει κανένα ρόλο. Απλά θα κρατήσεις περισσότερα δεδομένα απ' όσα σου χρειάζονται τεχνικά για να εμφανίσεις την έξοδο που θέλεις. 167 θέσεις είναι αστεία μικρό νούμερο και θα έχεις το τεράστιο πλεονέκτημα ότι ο τρόπος αποθήκευσης των δεδομένων δεν είναι σκλάβος του τρόπου εμφάνισης των δεδομένων.

 

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

Με τον τροπο που περιγραφεις, το προβλημα που εθεσα λυνεται σε μια γραμμη. ευχαριστω.

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

Πάλι θα έχεις θέμα αν δεν κατασταλάξεις που πάνε τα τελευταία 60 δευτερόλεπτα του τελευταίου λεπτού της πρώτης ώρας!

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

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

Πάλι θα έχεις θέμα αν δεν κατασταλάξεις που πάνε τα τελευταία 60 δευτερόλεπτα του τελευταίου λεπτού της πρώτης ώρας!

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

καλα, δεν εχεις αδικο. Το output ειναι αλλος βραχνας που εχω να λυσω. Βρηκα μια μεθοδο της πλακας που στην ουσια παλι προβλημα υπαρχει, αλλα τουλαχιστον η ραχοκοκαλια του αλγοριθμου μου (εισοδος, επεξεργασια και εξοδος δεδομενων) περναει την φαση της μεταγλωτισης. 

 

(Ειναι ζορι να σκεφτεσαι προγραμματιστικα, αλλα κααααααααποτε θα παρω το κολαι, που θα παει?)

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

Κοίτα "χομπίστας" είμαι όχι ειδικός! Αλλά με ενδιέφερε το θέμα και έκανα τις "ανάλογες" σκέψεις.

Γράψε όμως...το 3600-1 πως το χρεώνεις ώρα ή όχι;

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

για εισοδο 3599

μου εμφανιζει 

Το πληθος κλησεων με διαρκεια 58 εως 59 λεπτα, ειναι: 1

Αυτο στην ουσια ειναι λαθος, γιατι πού πηγε το 59' εως 59"??
αλλα ενα ακομα προβλημα ειναι πως, ενω τα λεπτα-κατηγοριες στο προβλημα,  αρχιζουν απο 0-59", την ιδια στιγμη ο πινακας στην ψευδογλωσσα αρχιζει απο 1 εως n  και οχι οπως πχ στη C απο 0 εως n-1.
Συνεπως εκανα αρχαριες ψευτο-πατεντες στην εκτυπωση η οποια ειναι η εξης:

για i:=1 κλπ
ΤΥΠΩΣΕ("Το πληθος κλησεων με διαρκεια ",i-1," έως ", i," λεπτα, ειναι: ",pin , EOLN);

ενω για εισοδο 3600

Το πληθος κλησεων με διαρκεια 1 εως 2 ωρες, ειναι: 1

Εδω η πατεντα που εκανα ειναι:  -καπως αστεια και που σκεφτηκα να κανω κατι τετοιο- 
 

ΓΙΑ i:=60 ΕΩΣ 167 ΕΠΑΝΑΛΑΒΕ
    j:=1;
        ΕΑΝ ( pin > 0 ) ΤΟΤΕ
          ΤΥΠΩΣΕ("Το πληθος κλησεων με διαρκεια ",j," έως ",j+1 ," ωρες, ειναι: ",pin , EOLN);
        ΕΑΝ-ΤΕΛΟΣ
    j:=j+1;
ΓΙΑ-ΤΕΛΟΣ
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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