Husja Opublikowano 27 Grudnia 2004 Zgłoś Opublikowano 27 Grudnia 2004 Cześć, mam problem z napisaniem pewnego programu. Nie wiem jak do niego podejść, nie mam kompletnie żadnego pomysłu, możecie mi pomóc? Treść mojego problemu wygląda tak: „Napisz funkcję do konwersji liczb zapisanych w notacji rzymskiej na liczby typu unsigned int oraz funkcję wykonującą przekształcenie odwrotne. Możesz ograniczyć się do liczb z zakresu 1-10000" Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DomBros Opublikowano 27 Grudnia 2004 Zgłoś Opublikowano 27 Grudnia 2004 Ja bym to zrobił na samych if 'ach. Najpierw sprawdzał długość stringu prowadzonego jako liczba rzymska. A na stępnie tyle razy wykonywał pętle for() ile licz. A w pętli for dał same if znak==V to liczba+=5 if znak==X to liczba+=10 itp. Co Ty na to ?? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Husja Opublikowano 27 Grudnia 2004 Zgłoś Opublikowano 27 Grudnia 2004 Tak, ale... wyjdzie mniej więcej coś takiego:[php:1:9fb86ae604] char tab[20]; unsigned int liczba = 0; int i; cout<<"podaj liczbe rzymska "; cin>>tab; for(i = 0;i<20;i++) { if(tab=='M') liczba+=1000; else if(tab=='C') liczba+=100; else if(tab=='X') liczba+=10; else if(tab=='V') liczba+=5; else if(tab=='I') liczba++; } cout<<"liczba uint: "<<liczba;[/php:1:9fb86ae604] ale nie będą działać takie liczby jak XL itp. Co z tym zrobić? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Husja Opublikowano 27 Grudnia 2004 Zgłoś Opublikowano 27 Grudnia 2004 Tak, ale... wyjdzie mniej więcej coś takiego:[php:1:7d4b52e7b6] char tab[20]; unsigned int liczba = 0; int i; cout<<"podaj liczbe rzymska "; cin>>tab; for(i = 0;i<20;i++) { if(tab=='M') liczba+=1000; else if(tab=='C') liczba+=100; else if(tab=='X') liczba+=10; else if(tab=='V') liczba+=5; else if(tab=='I') liczba++; } cout<<"liczba uint: "<<liczba;[/php:1:7d4b52e7b6] ale nie będą działać takie liczby jak XL itp. Co z tym zrobić? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Nargil Opublikowano 27 Grudnia 2004 Zgłoś Opublikowano 27 Grudnia 2004 [php:1:ac0df27d4f]#include <iostream> #include <stdlib.h> using namespace std; int zamien(char znak) { if(znak=='M') return 1000; else if(znak=='C') return 100; else if(znak=='X') return 10; else if(znak=='V') return 5; else if(znak=='I') return 1; else return 0; } int main(int argc, char *argv[]) { char tab[20]; unsigned int liczba = 0; int i; cout<<"podaj liczbe rzymska "; cin>>tab; liczba=zamien(tab[0]); for(i=1; i<=strlen(tab)-1; ++i) { if(zamien(tab) > zamien(tab[i-1])) { liczba=zamien(tab) - liczba; } else { liczba+=zamien(tab); } } cout << endl << liczba << endl; system("PAUSE"); return 0; }[/php:1:ac0df27d4f] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Husja Opublikowano 30 Grudnia 2004 Zgłoś Opublikowano 30 Grudnia 2004 Jak na razie kombinuje i mam to: [php:1:f05a72c98e] #include <stdio.h> #include <stdlib.h> int zamien(char znak) { if(znak=='M') return 1000; else if(znak=='C') return 100; else if(znak=='X') return 10; else if(znak=='V') return 5; else if(znak=='I') return 1; else return 0; } int main() { char tab[20]; unsigned int liczba = 0; int i; printf("podaj liczbe rzymska n"); for(i=0;i<strlen(tab);i++) scanf("%c",&tab); liczba=zamien(tab[0]); for(i=0; i<strlen(tab)-1; i++) { if(zamien(tab) > zamien(tab[i-1])) { liczba=zamien(tab) - liczba; } else { liczba+=zamien(tab); } } printf(" %in", liczba); system("PAUSE"); return 0; }[/php:1:f05a72c98e] Ale nadal nie chce działać :(, proszę o daleszą pomoc :oops: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DomBros Opublikowano 30 Grudnia 2004 Zgłoś Opublikowano 30 Grudnia 2004 Prosze :) [php:1:6dec87d22d] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int zamien(char znak) { if(znak=='M'||znak=='m') return 1000; else if(znak=='D'||znak=='d') return 500; else if(znak=='C'||znak=='c') return 100; else if(znak=='L'||znak=='l') return 50; else if(znak=='X'||znak=='x') return 10; else if(znak=='V'||znak=='v') return 5; else if(znak=='I'||znak=='i') return 1; else return 0; } int main() { char tab[20]; int liczba = 0; int i; printf("podaj liczbe rzymska n"); scanf("%s",&tab); int zamienn=0; for(i=0; i<strlen(tab); i++) { if(zamien(tab) <= zamienn) { liczba+=zamien(tab); } else { liczba=liczba-2*zamienn+zamien(tab); } zamienn=zamien(tab); } printf(" %in", liczba); getch(); return 0; } [/php:1:6dec87d22d] Szczęśliwego Nowego Roku !! Baw się dobrze. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Husja Opublikowano 30 Grudnia 2004 Zgłoś Opublikowano 30 Grudnia 2004 Dziękuje Wam za pomoc, bardzo mocno, diablenie mocno ]:-> :* pierwsza część już działa i wygląda tak: [php:1:7346547e80] #include <stdio.h> #include <stdlib.h> #include <string.h> int zamien(char znak) { if(znak=='M') return 1000; else if(znak=='C') return 100; else if(znak=='X') return 10; else if(znak=='V') return 5; else if(znak=='I') return 1; else return 0; } int main() { char tab[20]; unsigned int liczba = 0; int i; printf("podaj liczbe rzymska n"); for(i=0;i<20;i++) { scanf("%c",&tab); if (!isalpha(tab)) break; } for(i=0; i<strlen(tab)-1; i++) { if(zamien(tab) < zamien(tab[i+1])) liczba -= zamien(tab); else liczba+=zamien(tab); } printf(" %dn", liczba); system("PAUSE"); return 0; } [/php:1:7346547e80] niestety do pełni szczęścia potrzebuję jeszcze napisać funkcję, ale funkcję wykonującą przekształcenie odwrotne czyli działającej na odwrót… Jakieś propozycje? :oops: :oops: :oops: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DomBros Opublikowano 30 Grudnia 2004 Zgłoś Opublikowano 30 Grudnia 2004 Troche poprawiłem swoją wersje działa teraz bardziej elegancko. Chciałbym Ci tylko zwrócić uwagę że brakuje ci paru cyferek rzymskich... [php:1:9279651512] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> char rzym[14]={'M','m','D','d','C','c','L','l','X','x','V','v','I','i'}; int spr=0; int zamien(char znak) { if(znak=='M'||znak=='m') return 1000; else if(znak=='D'||znak=='d') return 500; else if(znak=='C'||znak=='c') return 100; else if(znak=='L'||znak=='l') return 50; else if(znak=='X'||znak=='x') return 10; else if(znak=='V'||znak=='v') return 5; else if(znak=='I'||znak=='i') return 1; else return 0; } void sprawdz(char *tab) { int i,j; for(i=0;i<strlen(tab);i++) { for(j=0;j<14;j++) { if(tab==rzym[j]) { spr=1; break; } spr=0; } } } int main() { clrscr(); char tab[20]; int liczba = 0; int i,j,zamienn=0; printf("Podaj liczbe rzymska: nn"); scanf("%s",&tab); sprawdz(tab); if(spr==0) { printf("nnNieprawidlowe ciag wejsciowy !!"); getch; return 0; } for(i=0; i<strlen(tab); i++) { if(zamien(tab) <= zamienn) { liczba+=zamien(tab); } else { liczba=liczba-2*zamienn+zamien(tab); } zamienn=zamien(tab); } printf("nLiczba arabska = %in", liczba); getch(); return 0; [/php:1:9279651512] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DomBros Opublikowano 30 Grudnia 2004 Zgłoś Opublikowano 30 Grudnia 2004 Prosze oto odwrotny, mógł być bardzie przejrzysty, ale ... :) [php:1:dc13d78bc9] #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <iostream.h> int arab[13]= { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000}; char str[20]; int main() { clrscr(); int i=12,liczba=-1,z=0; cout << "Podaj liczbe arabska: nn"; cin >> liczba; while(liczba >0) { while ( liczba >= arab) { liczba -= arab; if(i==0) {strcat(str,"I"); z+=1;} else if(i==1) {strcat(str,"IV"); z+=2;} else if(i==2) {strcat(str,"V"); z+=1;} else if(i==3) {strcat(str,"IX"); z+=2;} else if(i==4) {strcat(str,"X"); z+=1;} else if(i==5) {strcat(str,"XL"); z+=2;} else if(i==6) {strcat(str,"L"); z+=1;} else if(i==7) {strcat(str,"XC"); z+=2;} else if(i==8) {strcat(str,"C"); z+=1;} else if(i==9) {strcat(str,"CD"); z+=2;} else if(i==10) {strcat(str,"D"); z+=1;} else if(i==11) {strcat(str,"CM"); z+=2;} else if(i==12) {strcat(str,"M"); z+=1;} } i--; } cout << "nLiczba rzymska:n"; for(i=0;i<z;i++) cout << str; getch(); return 0; } [/php:1:dc13d78bc9] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...