problem z programem w C
problem z programem w C
//2. Tłumaczenie liczb na słowa - Napisz program, który umożliwi zamianę liczb < 1 000 000, na słowa.
#include <stdafx.h>
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
static char * milion[4] = { "", "milion ", "miliony ", "milionow "};
static char * tysiace[4] = { "", "tysiac ", "tysiace ", "tysiecy "};
static char * setki[10] = { "", "sto ", "dwiescie ", "trzysta ", "czterysta ",
"piecset ", "szescset ", "siedemset ", "osiemset ", "dziewiecset " };
static char * nastki[10] = { "dziesiec", "jedenascie", "dwanascie", "trzynascie", "czternascie",
"pietnascie", "szesnascie", "siedemnascie", "osiemnascie", "dziewietnascie" };
static char * dziesiatki[10] = { "", "dziesiec ", "dwadziescia ", "trzydziesci ", "czterdziesci ",
"piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat " };
static char * jednosci[10] = { "", "jeden ", "dwa ", "trzy ", "cztery ",
"piec ", "szesc ", "siedem ", "osiem ", "dziewiec " };
int main(int argc, char *argv[])
{
char tab[6];
int d, len;
char *p;
for(;;)
{
printf ("Podaj liczbe < 1 000 000 \n");
printf ("========================\n");
cin.getline(tab, 6);
len = strlen(tab);
d = strtoul(tab, &p, 10);
if(p != (tab + len))
printf ("bledna liczba\n");
else break;
}
if(d == 0) printf( "zero");
else
switch(len)
{
case 6:
printf ("%s", milion[tab[len - 6] - '0']);
case 5:
d = tab[len - 5] - '0';
if(d == 1)
{
printf ("%s", nastki[tab[len - 4] - '0']);
printf (" %s", tysiace[tab[len - 4] - '0']);
goto next;
}
else;
printf ("%s", dziesiatki[d]);
case 4:
printf ("%s", jednosci[tab[len - 1] - '0']);
printf ("%s", tysiace[tab[len - 4] - '0']);
next:
case 3:
printf ("%s", setki[tab[len - 3] - '0']);
case 2:
d = tab[len - 2] - '0';
if(d == 1)
{
printf ("%s", nastki[tab[len - 1] - '0']);
break;
}
printf ("%s", dziesiatki[d]);
case 1:
printf ( "%s", jednosci[tab[len - 1] - '0']);
}
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
mam problem, program kompiluje się bez błędów ale posiada ich wiele, nie wiem w czym problem, np gdy wpisuje liczbe 58900 to czyta od tyłu i jeszcze zamienia liczby np 9 na 2 ;/
może ktoś mi pomoc?
była bym wdzięczna
#include <stdafx.h>
#include <cstdlib>
#include <iostream>
#include <time.h>
#include <conio.h>
using namespace std;
static char * milion[4] = { "", "milion ", "miliony ", "milionow "};
static char * tysiace[4] = { "", "tysiac ", "tysiace ", "tysiecy "};
static char * setki[10] = { "", "sto ", "dwiescie ", "trzysta ", "czterysta ",
"piecset ", "szescset ", "siedemset ", "osiemset ", "dziewiecset " };
static char * nastki[10] = { "dziesiec", "jedenascie", "dwanascie", "trzynascie", "czternascie",
"pietnascie", "szesnascie", "siedemnascie", "osiemnascie", "dziewietnascie" };
static char * dziesiatki[10] = { "", "dziesiec ", "dwadziescia ", "trzydziesci ", "czterdziesci ",
"piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat " };
static char * jednosci[10] = { "", "jeden ", "dwa ", "trzy ", "cztery ",
"piec ", "szesc ", "siedem ", "osiem ", "dziewiec " };
int main(int argc, char *argv[])
{
char tab[6];
int d, len;
char *p;
for(;;)
{
printf ("Podaj liczbe < 1 000 000 \n");
printf ("========================\n");
cin.getline(tab, 6);
len = strlen(tab);
d = strtoul(tab, &p, 10);
if(p != (tab + len))
printf ("bledna liczba\n");
else break;
}
if(d == 0) printf( "zero");
else
switch(len)
{
case 6:
printf ("%s", milion[tab[len - 6] - '0']);
case 5:
d = tab[len - 5] - '0';
if(d == 1)
{
printf ("%s", nastki[tab[len - 4] - '0']);
printf (" %s", tysiace[tab[len - 4] - '0']);
goto next;
}
else;
printf ("%s", dziesiatki[d]);
case 4:
printf ("%s", jednosci[tab[len - 1] - '0']);
printf ("%s", tysiace[tab[len - 4] - '0']);
next:
case 3:
printf ("%s", setki[tab[len - 3] - '0']);
case 2:
d = tab[len - 2] - '0';
if(d == 1)
{
printf ("%s", nastki[tab[len - 1] - '0']);
break;
}
printf ("%s", dziesiatki[d]);
case 1:
printf ( "%s", jednosci[tab[len - 1] - '0']);
}
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
mam problem, program kompiluje się bez błędów ale posiada ich wiele, nie wiem w czym problem, np gdy wpisuje liczbe 58900 to czyta od tyłu i jeszcze zamienia liczby np 9 na 2 ;/
może ktoś mi pomoc?
była bym wdzięczna
- Sokół
- Użytkownik
- Posty: 451
- Rejestracja: 17 wrz 2006, o 19:22
- Płeć: Mężczyzna
- Lokalizacja: Zielona Góra
- Podziękował: 15 razy
- Pomógł: 55 razy
problem z programem w C
Pierwsza uwaga - w jakim języku ma to być program? C++ czy c? Nazwa tematu wskazuje na c, a kod programu (przestrzen nazw etc.) miejscami na c++. I skoro Ci sie kompiluje, to kompilujesz to jako c++. Wywal nagłówki time.h i conio.h, nie używasz żadnej funkcji z tych bibliotek.
1. getline (char* s, streamsize n ) kompiuje pod wskazany adres n-1 znaków! Zobacz, że kiedy podajesz 6 cyfrową liczbę, to nie przyjmuje cyfry jedności;
2. W jednym czy dwoch miejsach nie wysylalas odpowiedniego rzedu wielkosci
dziwny algorytm... Ale po modyfikacji zdaje sie dzialac: Twoj kod z naprawionymi bledami:
1. getline (char* s, streamsize n ) kompiuje pod wskazany adres n-1 znaków! Zobacz, że kiedy podajesz 6 cyfrową liczbę, to nie przyjmuje cyfry jedności;
2. W jednym czy dwoch miejsach nie wysylalas odpowiedniego rzedu wielkosci
dziwny algorytm... Ale po modyfikacji zdaje sie dzialac: Twoj kod z naprawionymi bledami:
Kod: Zaznacz cały
#include <cstdlib>
#include <iostream>
using namespace std;
static char * milion[4] = { "", "milion ", "miliony ", "milionow "};
static char * tysiace[10] = { "tysiecy", "tysiecy ", "tysiace ", "tysiace ", "tysiace ", "tysiecy ", "tysiecy ", "tysiecy ", "tysiecy ", "tysiecy "};
static char * setki[10] = { "", "sto ", "dwiescie ", "trzysta ", "czterysta ",
"piecset ", "szescset ", "siedemset ", "osiemset ", "dziewiecset "
};
static char * nastki[10] = { "dziesiec", "jedenascie", "dwanascie", "trzynascie", "czternascie",
"pietnascie", "szesnascie", "siedemnascie", "osiemnascie", "dziewietnascie"
};
static char * dziesiatki[10] = { "", "dziesiec ", "dwadziescia ", "trzydziesci ", "czterdziesci ",
"piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat "
};
static char * jednosci[10] = { "", "jeden ", "dwa ", "trzy ", "cztery ",
"piec ", "szesc ", "siedem ", "osiem ", "dziewiec "
};
int main(int argc, char *argv[])
{
char tab[6];
int d, len;
char *p;
for (;;)
{
printf ("Podaj liczbe < 1 000 000 \n");
printf ("========================\n");
cin.getline(tab, 7);
len = strlen(tab);
d = strtoul(tab, &p, 10);
if (p != (tab + len))
printf ("bledna liczba\n");
else break;
}
// cout << len << endl << d << endl;
if (d == 0) printf( "zero");
else
switch (len)
{
case 6:
printf ("%s", setki[tab[len - 6] - '0']);
case 5:
d = tab[len - 5] - '0';
if (d == 1)
{
printf ("%s", nastki[tab[len - 4] - '0']);
printf (" %s", tysiace[tab[len - 4] - '0']);
goto next;
}
else;
printf ("%s", dziesiatki[d]);
case 4:
printf ("%s", jednosci[tab[len - 4] - '0']);
printf ("%s", tysiace[tab[len - 4] - '0']);
next:
case 3:
printf ("%s", setki[tab[len - 3] - '0']);
case 2:
d = tab[len - 2] - '0';
if (d == 1)
{
printf ("%s", nastki[tab[len - 1] - '0']);
break;
}
printf ("%s", dziesiatki[d]);
case 1:
printf ( "%s", jednosci[tab[len - 1] - '0']);
}
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
problem z programem w C
dziękuje
a możesz mi powiedzieć co zmienić żeby w całości było w c ?:) chyba, że poprawiłeś już wszystko:)zależy mi na tym, żeby było wszystko ładnie bo to program na zaliczenie tym bardziej dziękuję
- Sokół
- Użytkownik
- Posty: 451
- Rejestracja: 17 wrz 2006, o 19:22
- Płeć: Mężczyzna
- Lokalizacja: Zielona Góra
- Podziękował: 15 razy
- Pomógł: 55 razy
problem z programem w C
Nie poprawiałem na C; od zawsze korzystam z dobrodziejstw c++. Do poprawienia tylko został zapis biblioteki na stary styl z c (ma być stdlib.h zamiast cstdlib), no i trzeba czymś zastąpić użycie strumieni (wywalić iostream) - lecz stamtąd pochodzi funkcja cin.getline(...), więc musisz znaleźć jej odpowiednik, albo inaczej zorganizować wczytywanie danych. Niech ktoś kompetentny się wypowie.
A i na Twoim miejscu upewniłbym się czy to ma być stuprocentowo czyste c; nie używaliście na laborkach strumieni (biblioteka iostream, cin, cout - mówi Ci to coś?), ...)
---
dla '1000' program wypisuje 'jeden tysiecy'.
A i na Twoim miejscu upewniłbym się czy to ma być stuprocentowo czyste c; nie używaliście na laborkach strumieni (biblioteka iostream, cin, cout - mówi Ci to coś?), ...)
---
dla '1000' program wypisuje 'jeden tysiecy'.
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
problem z programem w C
dodanie funkcji zamiast
oraz zamiast tych bibliotek co są:
stdio.h, stdlib.h, string.h i usuniecie przestrzeni nazw
spowoduje że program będzie w klasycznym C
Kod: Zaznacz cały
scanf("%s",tab)
Kod: Zaznacz cały
cin.getline(tab, 7);
stdio.h, stdlib.h, string.h i usuniecie przestrzeni nazw
spowoduje że program będzie w klasycznym C
problem z programem w C
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static char * tysiace[10] = { "tysiecy", "tysiecy ", "tysiace ", "tysiace ", "tysiace ", "tysiecy ", "tysiecy ", "tysiecy ", "tysiecy ", "tysiecy "};
static char * setki[10] = { "", "sto ", "dwiescie ", "trzysta ", "czterysta ",
"piecset ", "szescset ", "siedemset ", "osiemset ", "dziewiecset "
};
static char * nastki[10] = { "dziesiec", "jedenascie", "dwanascie", "trzynascie", "czternascie",
"pietnascie", "szesnascie", "siedemnascie", "osiemnascie", "dziewietnascie"
};
static char * dziesiatki[10] = { "", "dziesiec ", "dwadziescia ", "trzydziesci ", "czterdziesci ",
"piecdziesiat ", "szescdziesiat ", "siedemdziesiat ", "osiemdziesiat ", "dziewiecdziesiat "
};
static char * jednosci[10] = { "", "jeden ", "dwa ", "trzy ", "cztery ",
"piec ", "szesc ", "siedem ", "osiem ", "dziewiec "
};
int main(int argc, char *argv[])
{
char tab[6];
int d, len;
char *p;
for (;;)
{
printf ("Podaj liczbe < 1 000 000 \n");
printf ("========================\n");
scanf("%s",tab);
len = strlen(tab);
d = strtoul(tab, &p, 10);
if (p != (tab + len))
printf ("bledna liczba\n");
else break;
}
// cout << len << endl << d << endl;
if (d == 0) printf( "zero");
else
switch (len)
{
case 6:
printf ("%s", setki[tab[len - 6] - '0']);
case 5:
d = tab[len - 5] - '0';
if (d == 1)
{
printf ("%s", nastki[tab[len - 4] - '0']);
printf (" %s", tysiace[tab[len - 4] - '0']);
goto next;
}
else;
printf ("%s", dziesiatki[d]);
case 4:
printf ("%s", jednosci[tab[len - 4] - '0']);
printf ("%s", tysiace[tab[len - 4] - '0']);
next:
case 3:
printf ("%s", setki[tab[len - 3] - '0']);
case 2:
d = tab[len - 2] - '0';
if (d == 1)
{
printf ("%s", nastki[tab[len - 1] - '0']);
break;
}
printf ("%s", dziesiatki[d]);
case 1:
printf ( "%s", jednosci[tab[len - 1] - '0']);
}
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
dzięki
-- 26 sty 2010, o 10:21 --
chciałabym, żeby to było dobrze zrobione, a jeśli chodzi o język programowania to jestem pewna, że to musi być c
problem z programem w C
dziękuję za pomoc -- 26 sty 2010, o 22:02 --tylko, że wciaż wypisuje mi jeden tysiecy po wpisaniu 1000
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
problem z programem w C
Pokombinuj sobie z tymi końcówkami żeby wszystkie pasowały - to nie jest trudne a ty sie wprawisz dzięki temu.