Permalänk

hjälp med morse program

Hej!

jag en upgift jag inte klarar av jag ska göra ett program som konverterar , översätter text (inte åäö) till morse koder, för G behövs bara att de ska klara att översätta åt ena hållet från text till morse.
jag skulle verkligen behöva lite hjälp med hur jag ska göra, jag har bara läst programmering i 6 veckor ungefär så jag är en riktig nybörjare

Hur programmet ska fungera

1) Användaren ska i ett menyval få välja om han/hon vill översätta ett meddelande till morse eller översätta från morse till vanlig text.
2) Översätta till morse:
a. Användaren anger den text som ska översättas.
b. Programmet översätter texten, tecken för tecken, till morsekod och skriver ut resultatet med ett mellanslag mellan varje kod/tecken.

jag frågade min lärare om lite tips hur jag skulle lägga upp de hela och fick detta som svar

Ok, börja med dem lite enklare sakerna som tex den meny som behövs där man kan välja åt vilket håll man vill översätta. Programmet behöver dock sedan bara klara att översätta från text till morse för att bli godkänt.
Efter att användaren sedan matat in den sträng som ska översättas så måste vi på något sätt gå igenom strängen, tecken för tecken, och då skriva ut morsekoderna för respektive bokstav. Någon typ av slinga kanske kan fungera här och morsekoder osv kan lagras i tex fält...

menyer och det har jag absolut inget problem med att göra men hur ska jag göra för gå igenom strängarna tecken för tecken och få den att skriva ut morse koden? har också suttit å läst fram å tillbaka om fält många många ggr och jag förstår inte riktigt.

här är morsekoderna

A .- K -.- U ..-
B -… L .-.. V ...-
C -.-. M -- W .--
D -.. N -. X -..-
E . O --- Y -.--
F ..-. P .--. Z --..
G --. Q --.- Å .--.-
H …. R .-. Ä .-.-
I .. S ... Ö ---.
J .--- T -

här är det jag gjort så här långt

#include <iostream>
#include <string>
using namespace std;

int main()
{
cout << "\n **************************" << endl;
cout << " * Morse kod konverterare *" << endl;
cout << " **************************" << endl << endl << endl;
string inmatning;
cout << "Vad vill du g\x94ra?\n(1)\x94vers\x84tta till morse\n(2)\x94vers\x84tta fr\x86n morse\nVal: "<< endl;
cin >> inmatning;

if (inmatning == "1")
{
cout << "\x94vers\x84tta till morse\n";

}
else if (inmatning == "2")
cout << "\x84vers\x84tta fr\x86n morse\n";

return 0;
}

är väldigt tacksam för lite hjälp på traven så jag kommer igång.

Visa signatur

Asus Crosshair Formula IV /Amd Phenom II X6 1090 @ 4.2ghz / 8Gb@1700mhz 8-8-8-24 Corsair Dominator / Xfx Radeon 5970 BE / creative X-fi titanuim fatal1ty / 2X Spinpoint F3 Raid0 / Corsair H50 /Mach1 1220W / Antec 1200 / razer mamba / logitech g19 / Benq 22" / aerocool V12XT

Permalänk
Medlem

Lite teoretisk... :
Först och främst behöver du en översättningstabell, exempelvis två arrays, eller en struct eller liknande, med värdena för vilken bokstav representerar som vilken morsekod.
Sedan är det bara att läsa av inputen tecken för tecken och matcha det mot din "tabell".

Permalänk

tack för att du svarade!

ok efter jag har lagt både alfabetet och morsekoderna i arrays hur ska ja då göra för att inputen ska läsa av tecken för tecken?

jag vet inte hur jag ska koda de du får om du orkar visa mig ett exempel.

återigen tack för ditt svar

Visa signatur

Asus Crosshair Formula IV /Amd Phenom II X6 1090 @ 4.2ghz / 8Gb@1700mhz 8-8-8-24 Corsair Dominator / Xfx Radeon 5970 BE / creative X-fi titanuim fatal1ty / 2X Spinpoint F3 Raid0 / Corsair H50 /Mach1 1220W / Antec 1200 / razer mamba / logitech g19 / Benq 22" / aerocool V12XT

Permalänk
Medlem
Skrivet av timmie_tooth:

tack för att du svarade!

ok efter jag har lagt både alfabetet och morsekoderna i arrays hur ska ja då göra för att inputen ska läsa av tecken för tecken?

jag vet inte hur jag ska koda de du får om du orkar visa mig ett exempel.

återigen tack för ditt svar

om du har en sträng och använder den som en array kan du få ut varje enskillt täcken, tänk att en std::String är en char array.

t.ex

std::string hej = "hej"; cout << hej[1] << endl;

kommer att skriva ut "e".

nu borde du kunna loopa igenom allt

Visa signatur

Laptop - MacBook 2.0GHz, 4GB ram, Intel GMA 950
Stationär - i5 3570k @ 4ghz, 8gb ram, 120gb ssd + 2tb hdd, Windows 8 64bit, fractal design arc
Citera så jag hittar tillbaka :)

Permalänk

tackar! vilken loop ska ja använda då?

Visa signatur

Asus Crosshair Formula IV /Amd Phenom II X6 1090 @ 4.2ghz / 8Gb@1700mhz 8-8-8-24 Corsair Dominator / Xfx Radeon 5970 BE / creative X-fi titanuim fatal1ty / 2X Spinpoint F3 Raid0 / Corsair H50 /Mach1 1220W / Antec 1200 / razer mamba / logitech g19 / Benq 22" / aerocool V12XT

Permalänk

[QUOTE="timmie_tooth;10057971"]så här ser koden ut nu, är de fel eller är de rätt och hur ska jag fortsätta?

#include <iostream>
#include <string>
using namespace std;

int main()
{
string inmatning;
string alfabet;
alfabet = 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z';

string morse;
morse = ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..", ".--.-",".-.-", "---." ;

cout << "\n **************************" << endl;
cout << " * Morse kod konverterare *" << endl;
cout << " **************************" << endl << endl << endl;

cout << "\n(1)\x94vers\x84tta till morse\n(2)\x94vers\x84tta fr\x86n morse\n\nv\x84lj altenativ: ";
cin >> inmatning;

if (inmatning == "1")
{
cout << "\n\x94vers\x84tta till morse\n";

}
else if (inmatning == "2")
{
cout << "\n\x84vers\x84tta fr\x86n morse\n\n";

}
cout << "\nSkriv in ordet du vill \x94vers\x84tta:";
cin >> inmatning;

return 0;
}

Visa signatur

Asus Crosshair Formula IV /Amd Phenom II X6 1090 @ 4.2ghz / 8Gb@1700mhz 8-8-8-24 Corsair Dominator / Xfx Radeon 5970 BE / creative X-fi titanuim fatal1ty / 2X Spinpoint F3 Raid0 / Corsair H50 /Mach1 1220W / Antec 1200 / razer mamba / logitech g19 / Benq 22" / aerocool V12XT

Permalänk

OK nu känns de som ja fått 1 litet micro kliv åt rätt riktining men hur ska jag göra för att
få den att känna av å gå igenom det jag matar in och sen istället för att skriva ut 1,2,3 som värde så ska den skriva ut morsekoden till respektive bokstav jag matat in... tex ja matar in timmy så ska den gå igenom först t sen i sen m... osv och den ska byta ut bokstäverna till morsekoden till respektive bokstav.

jag vill att värdet den skriver ut ska bytas till morsekoden för respektive bokstav. ja har testat byta runt lite i koden men får de inte å fungera som ja tänker så ja tänker väl antagligen helt åt (pip)....

upskattar verkligen all hjälp ja kan få! (jag vet att ja e trög men snart förstår jag nog)

//morse program
#include <iostream>
using namespace std;

int main()
{
int skriv;
cout << "Mata in de du vill \x94vers\x84tta:";
cin >> skriv;
// Skapa en array som sparar 3 heltal
int text[3];

// Tilldela de olika platserna i arrayen olika värde
text[0] = 1; // Plats 1 har index 0
text[1] = 2; // Plats 2 har index 1
text[2] = 3; // Plats 3 har index 2

// Skriv ut alla värden i arrayen (vi kan använda en for-loop!)
for (int i=0; i < 3; i++) {
cout << "På plats " << i << " finns värdet " << text[i] << endl;
}
return 0;
}

Visa signatur

Asus Crosshair Formula IV /Amd Phenom II X6 1090 @ 4.2ghz / 8Gb@1700mhz 8-8-8-24 Corsair Dominator / Xfx Radeon 5970 BE / creative X-fi titanuim fatal1ty / 2X Spinpoint F3 Raid0 / Corsair H50 /Mach1 1220W / Antec 1200 / razer mamba / logitech g19 / Benq 22" / aerocool V12XT

Permalänk
Medlem

Du kan börja med att lagra alla morsetecken i ex. en string array där positionen i arrayen matchar morsetecknets position i alfabetet:

string table[26]; table[0]=".-"; //morsetecken 'a' table[1]="-..."; //morsetecken 'b' osv..

Om du sedan har ett tecken kan du enkelt få ut den motsvarande morsekoden genom:

char letter='g'; int index=letter-'a'; //letter-'a' ger oss ett index som börjar på 0 för a ('a'-'a' == 0), 1 för b ('b'-'a' == 1) osv.. string morsecode=table[index]; //morsecode innehåller nu morsekoden för tecknet som vi skrev in i letter..

du kan med hjälp av detta sedan enkelt översätta en sträng enligt:

string text="abc"; for(int i=0;i<text.length();i++) { char letter=text.at(i); //letter kommer vara: 'a', sedan 'b', sedan 'c' för vår sträng "abc"... /* Du måste innan detta hantera fall då letter inte är ett tecken a-z (ex. å,ä,ö som inte ligger direkt efter z, mellanslag, stora bokstäver (som inte har samma teckenvärde som små bokstäver), och tecken som du inte är intresserad av alls, ex. punkttecken, kommatecken och andra specialtecken... ) */ string morse=table[letter-'a']; //hämtar morsekoden std::cout<<morse<<" "; //skriver ut morsekoden för tecknet följt av ett mellanslag } std::cout<<std::endl;

Har väl kanske gett dig lite för mycket ren kod nu, men du hade ju redan fått koncepten från andra tidigare i tråden så jag antar att du inte riktigt fattat hur du skulle kunna implementera dem. Får hoppas att du ändå sätter dig ner och förstår koden och inte bara försöker använda den..

Visa signatur

The difference between stupidity and genius - the latter has limits