r2d290 Skrevet 14. april 2010 Del Skrevet 14. april 2010 Heisann Oppgaven går enkelt og greit ut på å gjøre om fra romersk til arabisk tallsystem. Jeg har tatt med alle unntakene jeg støtte på, så det ble en del if-setninger. Mulig noe av dette er unødvendig. Poenget er: Jeg har fått til oppgaven dersom man skriver inn nøyaktig 3 romertall(bokstaver), men jeg ønsker jo selvsagt at jeg skal kunne skrive inn så mange romerbokstaver som jeg ønsker. Derfor trenger jeg å få satt inn en array.length og litt diverse variabler. Kunne noen tenke seg å sette meg litt i gang med dette? PS: jeg vet at koden sikkert er unødvendig stor og sånn, men jeg ønsker likevel (hvis mulig) å ta utgangspunkt i denne koden, ettersom jeg har skrevet den selv og forstår den fullt ut. Er ikke viktig for meg å ha en mest mulig effektiv kode, bare jeg forstår den =) // april07.cpp : Defines the entry point for the console application. // // TODO-List // Faa innholdet i skriv-tabell inn i lag-tabell // Lag tabellen like stor som det som skrives inn // Rydde koden #include "stdafx.h" #include <iostream> #include <string> using namespace std; const int antallHoyeste = 3; const int maksTabell = 3; void lagTabell(string *tabell, int &antall); void skrivTabell(const string *tabell, int *arabisk, int antall); unsigned char etRomertall; int temp; int _tmain(int argc, _TCHAR* argv[]) { while(1) { string tabell[maksTabell]; int antall; int arabisk[maksTabell]; cout <<"Skriv inn et romertall paa 3 bokstaver:"<<endl; lagTabell(tabell, antall); if (antall >= antallHoyeste) { skrivTabell(tabell, arabisk, antallHoyeste); } } return 0; } //-------------------------------------------------------------------- // // Funksjon som lager tabellen // // ------------------------------------------------------------------- void lagTabell( string *tabell, // Ut int &antall) // Ut: Ant elementer i tabell { antall = 3; int teller = 0; while (teller < antall) { cin >> etRomertall; tabell[teller] = etRomertall; teller++; } // while } // lagTabell void skrivTabell( const string *tabell, // inn int *arabisk, // inn int antall) // Inn: Antall som skal skrives { int h; for (h = 0; h<antall; h++) { cout << tabell[h]; } int teller; int resultat; int feilV = 0; int feilL = 0; int feilD = 0; cout<<" paa arabisk: "; for (teller = 0; teller<antall; teller++) { if (tabell[teller] == "I"||tabell[teller] == "i") arabisk[teller] = 1; if (tabell[teller] == "V"||tabell[teller] == "v") { feilV++; arabisk[teller] = 5; } if (tabell[teller] == "X"||tabell[teller] == "x") arabisk[teller] = 10; if (tabell[teller] == "L"||tabell[teller] == "l") { feilL++; arabisk[teller] = 50; } if (tabell[teller] == "C"||tabell[teller] == "c") arabisk[teller] = 100; if (tabell[teller] == "D"||tabell[teller] == "d") { feilD++; arabisk[teller] = 500; } if (tabell[teller] == "M"||tabell[teller] == "m") arabisk[teller] = 1000; } resultat=0; int hjelp; if (feilV>1||feilL>1||feilD>1) cout<< "Et romertall kan ikke ha mer enn én V, L eller D"; else { if (arabisk[0]>arabisk[1]) { if (arabisk[0]+arabisk[1]<arabisk[2]) cout<<"error1: dette tallet er ugyldig"; else if (arabisk[1]<arabisk[2]) { resultat = arabisk[0]+arabisk[2]-arabisk[1]; // eks: XIV=14 } if (arabisk[1]>=arabisk[2]) { resultat = arabisk[0]+arabisk[1]+arabisk[2]; // eks: VII=7 eller XVI = 16 eller XXV=25 eller XXX=10 } } } if (arabisk[0]==arabisk[1]) { if (arabisk[1]>=arabisk[2]) resultat = arabisk[0]+arabisk[1]+arabisk[2]; if (arabisk[1]<arabisk[2]) cout<<"error2: dette tallet er ugyldig"; // eks: IIV eller XIV (som er godtatt i foerste if) } if(arabisk[0]<arabisk[1]) { if (arabisk[1]>arabisk[2]) resultat = arabisk[1]-arabisk[0]+arabisk[2]; // eks: XLI = 41 if (arabisk[1]<=arabisk[2]) cout<<"error3: dette tallet er ugyldig"; } if (resultat != 0) cout<<resultat; cout << endl; } // skrivTabell Lenke til kommentar
[kami] Skrevet 14. april 2010 Del Skrevet 14. april 2010 Bruk vector istede for et array. Vector kan også sendes med som referanse. her er litt starthjelp. til bitene du trenger. #include <vector> typedef std::vector<string> StringTabell_t; void fyll_inn_data(StringTabell& tabell) { tabell.push_back("IV"); tabell.push_back("V"); tabell.push_back("I"); tabell.push_back("X"); } StringTabell_t tabell; tabell.push_back("IV"); cout << "størrelse: " << tabell.size() << std::endl; // output 1. fyll_inn_data(tabell); cout << "størrelse: " << tabell.size() << std::endl; // output 5. tabell.clear(); cout << "størrelse: " << tabell.size() << std::endl; // output 0. Lenke til kommentar
togge2 Skrevet 26. mai 2010 Del Skrevet 26. mai 2010 (endret) Kan hende jeg misforstod oppgaven men.. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { int i; int num = 0; char *in; int s[255] = {0}; if(argc != 2) { printf("%s <roman number to convert>\n", argv[0]); return 1; } s['M'] = 1000; s['D'] = 500; s['C'] = 100; s['L'] = 50; s['X'] = 10; s['V'] = 5; s['I'] = 1; in = argv[1]; for(i=0; i<strlen(in); i++) { if(s[in[i]] == 0) { printf("Invalid sign %c\n", in[i]); return 0; } num += s[in[i]]; if(s[in[i-1]] && s[in[i-1]] < s[in[i]]) { num -= s[in[i-1]]*2; } } printf("%s converts to %d\n", in, num); return 0; } Endret 26. mai 2010 av togge2 Lenke til kommentar
zotbar1234 Skrevet 27. mai 2010 Del Skrevet 27. mai 2010 for(i=0; i<strlen(in); i++) { /* (...) */ if(s[in[i-1]] && s[in[i-1]] < s[in[i]]) { num -= s[in[i-1]]*2; Hva skjer når i == 0? (Med in[i-1], altså). Lenke til kommentar
togge2 Skrevet 28. mai 2010 Del Skrevet 28. mai 2010 Godt poeng ! if(i > 0 && s[in[i-1]] && s[in[i-1]] < s[in]) {...} for(i=0; i<strlen(in); i++) { /* (...) */ if(s[in[i-1]] && s[in[i-1]] < s[in[i]]) { num -= s[in[i-1]]*2; Hva skjer når i == 0? (Med in[i-1], altså). Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå