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

ερωτηση για c++


madas

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

Δημοσ.

προσπαθω να φτιαξω ενα προγραμμα που θα μετατρεπει αριθμους σε κωδικα morse και αντιστροφα αλλα εχω κολλησει σε ενα σημειο. παρακατω παραθετω ενα σημειο του κωδικα για να μου λυσεε την απορια μου.

>
struct morse_code
   {
       int number;
       string ms;
   };
   morse_code a0, a1, a2, a3, a4, a5, a6, a7, a8, a9;
   a0.number = 0;
   a1.number = 1;
   a2.number = 2;
   a3.number = 3;
   a4.number = 4;
   a5.number = 5;
   a6.number = 6;
   a7.number = 7;
   a8.number = 8;
   a9.number = 9;
   a0.ms = "-----";
   a1.ms = ".----";
   a2.ms = "..---";
   a3.ms = "...--";
   a4.ms = "....-";
   a5.ms = ".....";
   a6.ms = "-....";
   a7.ms = "--...";
   a8.ms = "---..";
   a9.ms = "----.";

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

>cout << "Dwse arithmo: ";
     cin >> num;//το num το εχω δηλωσει παραπανω ως num[100]

και μετα με ενα loop θα συκγρινω ενα ενα τα κελια του num με τα a0.number, a1.number ....

αυτο που θελω να κανω και δεν ξερω ειναι

π.χ.

>for (int i=0;i<=9;i++)
         ai.number//το προβλημα ειναι οτι δεν ξερω πως να γραψω το i μεσα στο loop, ετσι ωστε σε καθε επαναληψη να αλλαζει τιμη

ελπιζω να βγαλατε ακρη........

Δημοσ.

>for (int i=0;i<=9;i++)
         ai.number//το προβλημα ειναι οτι δεν ξερω πως να γραψω το i μεσα στο loop, ετσι ωστε σε καθε επαναληψη να αλλαζει τιμη

ελπιζω να βγαλατε ακρη........

Στο For-Loop η τιμή του i αλλάζει μόνη της τιμή σε κάθε επανάληψη.

Το i++ που έχεις γράψει είναι ο τρόπος αλλαγής του i σε κάθε επανάληψη. To format γενικά του for είναι το εξής:

>for (initialization; condition; increase)

Έτσι όταν γράφεις for (int i=0;i<=9;i++) στην ουσία ορίζεις την μεταβλητή i και θέτεις την τιμή της ίση με το 0, ορίζεις ότι ο βρόγχος θα επαναλαμβάνεται όσο το i είναι μικρότερο ίσο του 9 και τέλος ότι σε κάθε επανάληψη το i αυξάνει την τιμή του κατά ένα.

Άρα αν μέσα στο for-loop γράψεις a.number αυτό θα περνάει ένα ένα τα στοιχεία του πίνακα a.

Δημοσ.

Για την ιστορία θα μπορούσε να γραφθεί και δίχως την χρήση πίνακα ή λεξικού (map) αν εκμεταλλευτούμε το γεγονός ότι η κωδικοποίηση Μορς μετά το 5 είναι ουσιαστικά αντανάκλαση του 1 ως 4 με αντικατάσταση της τελείας (dot) με παύλα (dash), ως:

 

>
//
// Morse Digit Encoder without array or map.
// (c) dx.
//
#include <iostream>
#include <string>

using namespace std;

string _retmcode(const int);

int main(void)
{
// Convert each digit to it's Morse code equivalent.
for(int N = 0; N < 10; N++)
           cout <<"#"<<N<<" --> "<<_retmcode(N)<<endl;

// End of program.
cout <<endl<<"Press Enter to exit..";
cin.get();

return 0;
}

string _retmcode(const int Digit)
{
/*
 * Morse code is reflective after 5. Notice from 6 and on, '.' swaps
 * with '-' while the count of '-' & '.' remains the same ;-)
 */
string Base = Digit < 6 ? "-----": ".....";

return Digit ?
	Base.replace(0, Digit < 6 ? Digit: (Digit + 1) % 6,
			Digit < 6 ? ".....": "-----", 0,
			Digit < 6 ? Digit: (Digit + 1) % 6):
	Base;
}

 

ΕΞΟΔΟΣ:

>
#0 --> -----
#1 --> .----
#2 --> ..---
#3 --> ...--
#4 --> ....-
#5 --> .....
#6 --> -....
#7 --> --...
#8 --> ---..
#9 --> ----.

Press Enter to exit..

Το πρόγραμμα έχει δοκιμασθεί σε C++ Builder 2009 και μπορεί να περιέχει bugs ή άλλες αβλεψίες.

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

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

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