painkiller44 Δημοσιεύτηκε Νοέμβριος 13, 2012 #1 Κοινοποίηση Δημοσιεύτηκε Νοέμβριος 13, 2012 Παιδιά μηπως κάποιος γνωρίζει πως σε ψευδοκώδικα θα μπορουσα να υλοποιησω την μετατροπή απο δεκαδικο σε δεκαεξαδικο ;:boxed: Link to comment Share on other sites More sharing options...
darien Νοέμβριος 13, 2012 #2 Κοινοποίηση Νοέμβριος 13, 2012 Διαιρείς τον αριθμό με το 16. Σε κάθε βήμα κρατάς το κάθε υπόλοιπο σαν δεκαεξαδικό ψηφίο και το πηλίκο γίνεται διαιρετέος στο επόμενο βήμα όπου ξαναδιαιρείς. Μέχρι να μείνει υπόλοιπο 0. Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 13, 2012 Author #3 Κοινοποίηση Νοέμβριος 13, 2012 την διαδικασία την εχω !δεν μπορω να βρω πως να κραταω το καθε υπολοιπο Link to comment Share on other sites More sharing options...
nucleus Νοέμβριος 13, 2012 #4 Κοινοποίηση Νοέμβριος 13, 2012 Σε ένα πίνακα ίσως ή σε μια λίστα ή στο σωρό (stack).Διάλεξε Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #5 Κοινοποίηση Νοέμβριος 14, 2012 αν τα αποθηκευσω σε πινακα πως θα κανω reverse τα στοιχεια ;με εντολη ΓΙΑ απο το τελος προς την αρχη; Link to comment Share on other sites More sharing options...
ganastasiou Νοέμβριος 14, 2012 #6 Κοινοποίηση Νοέμβριος 14, 2012 Μπορείς απλά να ξεκινάει απο το τέλος ο μετρητής και να πηγαίνει στην αρχή του πίνακα. Με βήμα -1. Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #7 Κοινοποίηση Νοέμβριος 14, 2012 ιδεα χωρις πινακα γιοκ ετσι ; Link to comment Share on other sites More sharing options...
darien Νοέμβριος 14, 2012 #8 Κοινοποίηση Νοέμβριος 14, 2012 Μπορείς να χρησιμοποιήσεις στοίβα, αλλά πάλι με πίνακα θα την κάνεις.. Link to comment Share on other sites More sharing options...
nucleus Νοέμβριος 14, 2012 #9 Κοινοποίηση Νοέμβριος 14, 2012 την διαδικασία την εχω !δεν μπορω να βρω πως να κραταω το καθε υπολοιποΔεν postαρεις μια την διαδικασία που έχεις Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #10 Κοινοποίηση Νοέμβριος 14, 2012 ΔΙΑΔΙΚΑΣΙΑ ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ(N)ΔΙΕΠΑΦΗΕΙΣΟΔΟΣN: INTEGER;ΕΞΟΔΟΣΔΕΔΟΜΕΝΑΑΡΧΗEAN (N>0) ΤΟΤΕ /* Εάν το ακέραιο μέρος της διαίρεσης του Ν με το 16 είναι μεγαλύτερο από το 0 */EAN (N(DIV(16)))>0 ΤΟΤΕ /* Το ακέραιο μέρος του πηλίκου περνάει στην επόμενη αναδρομική κλήση της διαδικασίας ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞΑΔ() */ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ(N(DIV(16)));/* Εμφάνισε το στοιχειο του πίνακα ΔΕΚΑΕΞΑΔΙΚΟ που βρίσκεται στη θέση Ν(MOD(16))+1 δηλαδή όσο είναι το υπόλοιπο της διαίρεσης του Ν με το 16 αυξημένο κατά 1*/ΤΥΠΩΣΕ(ΔΕΚΑΕΞΑΔΙΚΟ[N(MOD(16))+1])ΕΑΝ-ΤΕΛΟΣΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑΣN ειναι η εισοδος στην διαδικασία ενας ακεραιος δεκαδικος αριθμος Link to comment Share on other sites More sharing options...
djkostas Νοέμβριος 14, 2012 #11 Κοινοποίηση Νοέμβριος 14, 2012 Δεν ξέρω αν σε βοηθάει αλλά ορίστε το πρόγραμμα σε Python.Στην ουσία χρειάζεσαι κάποιον τρόπο να αποθηκεύεις κάθε 16δικό ψηφίο και μετά να το αντιστρέψεις!hx=""t=dcwhile True: if t<1:break t2=t t=int(t2/16) t2-=(t*16) if t2<10:hx+=str(t2) elif t2==10:hx+="A" elif t2==11:hx+="B" elif t2==12:hx+="C" elif t2==13:hx+="D" elif t2==14:hx+="E" elif t2==15:hx+="F"res=""for i in range(1,len(hx)+1): res+=hx[-i]print resdc=89722683205 Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #12 Κοινοποίηση Νοέμβριος 14, 2012 Δεν ξέρω αν σε βοηθάει αλλά ορίστε το πρόγραμμα σε Python.Στην ουσία χρειάζεσαι κάποιον τρόπο να αποθηκεύεις κάθε 16δικό ψηφίο και μετά να το αντιστρέψεις! hx=""t=dcwhile True: if t<1:break t2=t t=int(t2/16) t2-=(t*16) if t2<10:hx+=str(t2) elif t2==10:hx+="A" elif t2==11:hx+="B" elif t2==12:hx+="C" elif t2==13:hx+="D" elif t2==14:hx+="E" elif t2==15:hx+="F"res=""for i in range(1,len(hx)+1): res+=hx[-i]print res dc=89722683205 ευχαριστώ αλλα δεν βοηθησε και πολυ :innocent: Link to comment Share on other sites More sharing options...
darien Νοέμβριος 14, 2012 #13 Κοινοποίηση Νοέμβριος 14, 2012 ΔΙΑΔΙΚΑΣΙΑ ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ(N)ΔΙΕΠΑΦΗΕΙΣΟΔΟΣN: INTEGER;ΕΞΟΔΟΣΔΕΔΟΜΕΝΑΑΡΧΗEAN (N>0) ΤΟΤΕ /* Εάν το ακέραιο μέρος της διαίρεσης του Ν με το 16 είναι μεγαλύτερο από το 0 */EAN (N(DIV(16)))>0 ΤΟΤΕ /* Το ακέραιο μέρος του πηλίκου περνάει στην επόμενη αναδρομική κλήση της διαδικασίας ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞΑΔ() */ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ(N(DIV(16)));/* Εμφάνισε το στοιχειο του πίνακα ΔΕΚΑΕΞΑΔΙΚΟ που βρίσκεται στη θέση Ν(MOD(16))+1 δηλαδή όσο είναι το υπόλοιπο της διαίρεσης του Ν με το 16 αυξημένο κατά 1*/ΤΥΠΩΣΕ(ΔΕΚΑΕΞΑΔΙΚΟ[N(MOD(16))+1])ΕΑΝ-ΤΕΛΟΣΤΕΛΟΣ-ΔΙΑΔΙΚΑΣΙΑΣN ειναι η εισοδος στην διαδικασία ενας ακεραιος δεκαδικος αριθμοςμα αυτός είναι ψευδοκώδικας, τι ακριβώς ψάχνεις; Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #14 Κοινοποίηση Νοέμβριος 14, 2012 δεν αντιλαμβανομαι τον τροπο υλοποιησης βασικα πηγα να το τρεξω και δεν τρεχει .για μεγαλυτερους αριθμους απο 16 και ειπα μηπως γνωριζει καποιος . Link to comment Share on other sites More sharing options...
nucleus Νοέμβριος 14, 2012 #15 Κοινοποίηση Νοέμβριος 14, 2012 [MENTION=12152]painkiller44[/MENTION]Σεντονάκι incoming ή αλλιώς Wall of TextΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝΈνα αλφαριθμητικό HexDigits που θα κρατάει τα ψηφία του δεκαεξαδικού χωρισμένα με κόμμα ή όποιον άλλον χαρακτήρα θες. Μεταβλητή akeraioMeros που κρατά το ακέραιο μέρος της διαίρεσης του αριθμού που θες να μετατρέψεις με το 16 (INTEGER)Μεταβλητή ypoloipo που κρατά το υπόλοιπο της διαίρεσης του αριθμού που θες να μετατρέψεις με το 16 (INTEGER)Ελέγχεις τον αριθμό που θες να μετατρέψεις αν είναι μεγαλύτερος του 0 ξεκινάς:1)akeraioMeros = Math.Floor ή οποιαδήποτε συνάρτηση που επιστρέφει το ακέραιο μέρος ενός DECIMAL αριθμού με όρισμα το αποτέλεσμα της διαίρεσης του αριθμού που θες να μετατρέψεις με το 16 (χρησιμοποιείς τον τελεστή /)2)ypoloipo = κάνεις Mod τον αριθμό που θες να μετατρέψεις με το 163)ελέγχεις το ypoloipo.Αν είναι 10 συνενώνεις στο τέλος του HexDigits την τιμή "a,"Αν είναι 11 συνενώνεις στο τέλος του HexDigits την τιμή "b,"Αν είναι 12 συνενώνεις στο τέλος του HexDigits την τιμή "c,"Αν είναι 13 συνενώνεις στο τέλος του HexDigits την τιμή "d,"Αν είναι 14 συνενώνεις στο τέλος του HexDigits την τιμή "e,"Αν είναι 15 συνενώνεις στο τέλος του HexDigits την τιμή "f,"Aν έχει οποιαδήποτε άλλη τιμή αποθηκεύεις στον πίνακα HexDigits[anadromes] την τιμή του ypoloipo και ένα "," 4)Ελέγχεις την τιμή του akeraioMeros.Αν είναι > 0 κάνεις την πρώτη σου αναδρομή καλώντας την ίδια σου την συνάρτηση με όρισμα το akeraioMeros και αυξάνεις την τιμή του anadromes κατά 1 και πας πάλι στο βήμα 1) αν είναι 0 ο υπολογισμός τελειώνει και πας στο βήμα 5)5)Εμφάνιση αποτελέσματος.Αφαιρείς το τελευταίο "," από την HexDigits (με κάποια συνάρτηση Trim ή ανάλογη) μετά το χωρίζεις σύμφωνα με το "," (με κάποια συνάρτηση Split ή ανάλογη) και απλώς δείχνεις από το τέλος προς την αρχή τα μέρη τα οποία πήρες από την Splitκώδικας για VB Console ApplicationModule Module1 Dim anadromes As Integer = 1 Dim HexDigits As String Dim ypoloipo As Integer Dim akeraioMeros As Integer Sub convertToHex(ByVal input As Decimal) akeraioMeros = Math.Floor(input / 16) ypoloipo = input Mod 16 Console.WriteLine("Ektelesh:" & anadromes & " apotelesma diaireshs me to 16:" & akeraioMeros & " apotelesma Mod me to 16:" & ypoloipo) Select Case ypoloipo Case 10 : HexDigits += "a," Case 11 : HexDigits += "b," Case 12 : HexDigits += "c," Case 13 : HexDigits += "d," Case 14 : HexDigits += "e," Case 15 : HexDigits += "f," Case Else : HexDigits += ypoloipo.ToString & "," End Select If akeraioMeros > 0 Then anadromes += 1 convertToHex(akeraioMeros) End If End Sub Sub Main() Console.WriteLine("Eisagete aritmo gia metatroph:") Dim input = Console.ReadLine Dim numberToConvert As Decimal If Decimal.TryParse(input, numberToConvert) Then If numberToConvert > 0 Then Console.WriteLine("Swsto apotelesma metatrophs me thn synarthsh Hex toy .NET:" & Hex(numberToConvert)) convertToHex(numberToConvert) Dim correctOutput = HexDigits.TrimEnd(",").Split(",") Console.Write("Hex timh meta thn synarthsh mas:") For i As Integer = correctOutput.Length To 1 Step -1 Console.Write(correctOutput(i - 1)) Next End If Else Console.WriteLine("Lathos eisodos") End If End SubEnd Module Link to comment Share on other sites More sharing options...
kaynd Νοέμβριος 14, 2012 #16 Κοινοποίηση Νοέμβριος 14, 2012 δεν αντιλαμβανομαι τον τροπο υλοποιησης βασικα πηγα να το τρεξω και δεν τρεχει .για μεγαλυτερους αριθμους απο 16 και ειπα μηπως γνωριζει καποιος .Το κομμάτι του φευδοκώδικα που παράθεσες δουλεύει σαν τμήμα (το αντίστοιχο μιας function στη C) ενός μεγαλυτέρου προγράμματος. Η "ΔΙΑΔΙΚΑΣΙΑ ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ(N)" το μόνο που βλέπω κάνει είναι, αρχικά να ελέγχει αν το N είναι μεγαλύτερο του 0, μετά διαιρεί το N με το 16, και στη συνέχεια να ταΐζει το αποτέλεσμα αυτής της πράξης πίσω στην είσοδο της διαδικασίας για να υπολογιστεί την επομένη φορά που θα κληθεί... (όπου Ν βάζει το αποτέλεσμα της πράξης N(DIV(16)) . Απλά στο τέλος κάθε υπολογισμού σου τυπώνει το δεκαεξαδικό ψηφίο που υπολόγισε εκείνη τη στιγμή. (που btw λείπει η αντιστοίχηση των ψηφίων μετά το 9 με τα αντίστοιχα γράμματα) Ο πίνακας "ΔΕΚΑΕΞΑΔΙΚΟ[ ]" Δε δημιουργείται στο κομμάτι του κώδικα που παραθέτεις. Θα μπορούσε να δημιουργείται άνετα έξω από αυτή τη διαδικασία, κάθε φορά που ολοκληρώνεται μια πράξη και φτάνει στο τέλος της.Ίσως να μπορέσουμε να σε βοηθήσουμε να καταλάβεις τι παίζει, αν δώσεις και τον υπόλοιπο κώδικα.Μη περιμένεις έτοιμη λύση, δεν έχει νόημα. Υπάρχουν διάφοροι τρόποι για να επιτευχθεί το ίδιο αποτέλεσμα. και εδω είναι εμφανές ότι όποιος έγραψε αυτόν το κώδικα, έχει ακολουθήσει μια συγκεκριμένη οδό που ίσως εξυπηρετεί στο υπόλοιπο πρόγραμμα.Ένα παράδειγμα του κώδικα που πρέπει να συνοδεύει αυτό που παράθεσες, είναι αυτό που βλέπεις στο "Sub Main()" του nucleus. Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #17 Κοινοποίηση Νοέμβριος 14, 2012 [MENTION=12152]painkiller44[/MENTION]Σεντονάκι incoming ή αλλιώς Wall of TextΟΡΙΣΜΟΙ ΜΕΤΑΒΛΗΤΩΝΈνα αλφαριθμητικό HexDigits που θα κρατάει τα ψηφία του δεκαεξαδικού χωρισμένα με κόμμα ή όποιον άλλον χαρακτήρα θες. Μεταβλητή akeraioMeros που κρατά το ακέραιο μέρος της διαίρεσης του αριθμού που θες να μετατρέψεις με το 16 (INTEGER)Μεταβλητή ypoloipo που κρατά το υπόλοιπο της διαίρεσης του αριθμού που θες να μετατρέψεις με το 16 (INTEGER)Ελέγχεις τον αριθμό που θες να μετατρέψεις αν είναι μεγαλύτερος του 0 ξεκινάς:1)akeraioMeros = Math.Floor ή οποιαδήποτε συνάρτηση που επιστρέφει το ακέραιο μέρος ενός DECIMAL αριθμού με όρισμα το αποτέλεσμα της διαίρεσης του αριθμού που θες να μετατρέψεις με το 16 (χρησιμοποιείς τον τελεστή /)2)ypoloipo = κάνεις Mod τον αριθμό που θες να μετατρέψεις με το 163)ελέγχεις το ypoloipo.Αν είναι 10 συνενώνεις στο τέλος του HexDigits την τιμή "a,"Αν είναι 11 συνενώνεις στο τέλος του HexDigits την τιμή "b,"Αν είναι 12 συνενώνεις στο τέλος του HexDigits την τιμή "c,"Αν είναι 13 συνενώνεις στο τέλος του HexDigits την τιμή "d,"Αν είναι 14 συνενώνεις στο τέλος του HexDigits την τιμή "e,"Αν είναι 15 συνενώνεις στο τέλος του HexDigits την τιμή "f,"Aν έχει οποιαδήποτε άλλη τιμή αποθηκεύεις στον πίνακα HexDigits[anadromes] την τιμή του ypoloipo και ένα "," 4)Ελέγχεις την τιμή του akeraioMeros.Αν είναι > 0 κάνεις την πρώτη σου αναδρομή καλώντας την ίδια σου την συνάρτηση με όρισμα το akeraioMeros και αυξάνεις την τιμή του anadromes κατά 1 και πας πάλι στο βήμα 1) αν είναι 0 ο υπολογισμός τελειώνει και πας στο βήμα 5)5)Εμφάνιση αποτελέσματος.Αφαιρείς το τελευταίο "," από την HexDigits (με κάποια συνάρτηση Trim ή ανάλογη) μετά το χωρίζεις σύμφωνα με το "," (με κάποια συνάρτηση Split ή ανάλογη) και απλώς δείχνεις από το τέλος προς την αρχή τα μέρη τα οποία πήρες από την Splitκώδικας για VB Console ApplicationModule Module1 Dim anadromes As Integer = 1 Dim HexDigits As String Dim ypoloipo As Integer Dim akeraioMeros As Integer Sub convertToHex(ByVal input As Decimal) akeraioMeros = Math.Floor(input / 16) ypoloipo = input Mod 16 Console.WriteLine("Ektelesh:" & anadromes & " apotelesma diaireshs me to 16:" & akeraioMeros & " apotelesma Mod me to 16:" & ypoloipo) Select Case ypoloipo Case 10 : HexDigits += "a," Case 11 : HexDigits += "b," Case 12 : HexDigits += "c," Case 13 : HexDigits += "d," Case 14 : HexDigits += "e," Case 15 : HexDigits += "f," Case Else : HexDigits += ypoloipo.ToString & "," End Select If akeraioMeros > 0 Then anadromes += 1 convertToHex(akeraioMeros) End If End Sub Sub Main() Console.WriteLine("Eisagete aritmo gia metatroph:") Dim input = Console.ReadLine Dim numberToConvert As Decimal If Decimal.TryParse(input, numberToConvert) Then If numberToConvert > 0 Then Console.WriteLine("Swsto apotelesma metatrophs me thn synarthsh Hex toy .NET:" & Hex(numberToConvert)) convertToHex(numberToConvert) Dim correctOutput = HexDigits.TrimEnd(",").Split(",") Console.Write("Hex timh meta thn synarthsh mas:") For i As Integer = correctOutput.Length To 1 Step -1 Console.Write(correctOutput(i - 1)) Next End If Else Console.WriteLine("Lathos eisodos") End If End SubEnd Moduleευχαριστω πολυ ετσι το σκεφτηκα και εγω με πινακα αλλα σε μενα το εχει χωρις πινακα [MENTION=258]kaynd[/MENTION] ΑΡΧΗ /*ΚΥΡΙΩΣ ΠΡΟΓΡΑΜΜΑ*/ΔΕΚΑΕΞΑΔΙΚΟ[1]:= “0”;ΔΕΚΑΕΞΑΔΙΚΟ[2]:= “1”;ΔΕΚΑΕΞΑΔΙΚΟ[3]:= “2”;ΔΕΚΑΕΞΑΔΙΚΟ[4]:= “3”;ΔΕΚΑΕΞΑΔΙΚΟ[5]:= “4”;ΔΕΚΑΕΞΑΔΙΚΟ[6]:= “5”;ΔΕΚΑΕΞΑΔΙΚΟ[7]:= “6”;ΔΕΚΑΕΞΑΔΙΚΟ[8]:= “7”;ΔΕΚΑΕΞΑΔΙΚΟ[9]:= “8”;ΔΕΚΑΕΞΑΔΙΚΟ[10]:= “9”;ΔΕΚΑΕΞΑΔΙΚΟ[11]:= “A”;ΔΕΚΑΕΞΑΔΙΚΟ[12]:= “B”;ΔΕΚΑΕΞΑΔΙΚΟ[13]:= “C”;ΔΕΚΑΕΞΑΔΙΚΟ[14]:= “D”;ΔΕΚΑΕΞΑΔΙΚΟ[15]:= “E”;ΔΕΚΑΕΞΑΔΙΚΟ[16]:= “F”;ΤΥΠΩΣΕ(“Δώσε το Δεκαδικό αριθμό”);ΔΙΑΒΑΣΕ(ΔΕΚΑΔΙΚΟΣ);ΤΥΠΩΣΕ(ΔΕΚΑΔΙΚΟΣ);ΤΥΠΩΣΕ(“Η Δεκαεξαδική μορφή είναι:”);/* Κλήση της Διαδικασίας ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ() */ΥΠΟΛΟΓΙΣΕ ΜΕΤΑΤΡΟΠΗ_ΔΕΚΑΕΞ(ΔΕΚΑΔΙΚΟΣ)ΕΑΝ-ΤΕΛΟΣ ΤΕΛΟΣ Link to comment Share on other sites More sharing options...
kaynd Νοέμβριος 14, 2012 #18 Κοινοποίηση Νοέμβριος 14, 2012 Λείπει τουλάχιστον μια εντολή επανάληψης για να ξανακληθεί η διαδικασία που έγραψες έτσι ώστε να μετατρέψει δεκαδικούς αριθμούς μεγαλύτερους του 16... Επίσης εξακολουθεί να μη φαίνεται από που τελικά συμπληρώνεται ο πίνακας "ΔΕΚΑΕΞΑΔΙΚΟ[]"Αν αυτός είναι κώδικας που σας έχει δοθεί σε κάποιο μάθημα, κάτι έχει χαθεί στην αντιγραφή. Αν είναι από συσπουδαστή / γνωστό που έκανε την άσκηση, τότε απλά έχει ξεχάσει κάτι.Αφού καταλαβαίνεις τι γίνεται θα σου έλεγα να ξεκινήσεις απ την αρχή μονός σου. Ήδη ο nucleus σου έδωσε την απάντηση. (κακώς κατά τη γνώμη μου, αφού η ουσία είναι να καταλάβεις και όχι να αντιγράψεις). Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #19 Κοινοποίηση Νοέμβριος 14, 2012 ολο τον κωδικα θες? Link to comment Share on other sites More sharing options...
painkiller44 Νοέμβριος 14, 2012 Author #20 Κοινοποίηση Νοέμβριος 14, 2012 η διαδικασια ξανακαλεί τον εαυτό της Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.