Autor Wątek: Wczytywanie pojedynczych liczb w tablice.  (Przeczytany 6406 razy)

Offline _user

  • Użytkownik

# Maj 06, 2015, 02:22:51
Fakt, kiepsko przemyslane, czyli narazie najlepszymi rozwiazaniami dla mnie sa atoi i sscanf, wiec z nich bede korzystal, dzieki. :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xion

  • Redaktor
    • xion.log

  • +7
# Maj 06, 2015, 06:36:18
Ten cały wątek to doskonała ilustracja powodów, dla których początkujący nie powinni zaczynać od C / C++...

Cytuj
Masz tablicę charów, rzucasz ją do wskaźnika na int, potem robisz dereferencję - jakim cudem ma się kompilator domyślić (...)
Takim, że całkiem sporo języków bliższych temu stuleciu obsługuje konwersję string->int właśnie poprzez rzutowanie, bo to proste i naturalne. Oczywiście można tu powiedzieć, że w C nie ma stringów, a jedynie tablice charów, ale to będzie jedynie wskazanie na część całego problemu :)

Cytuj
Wczytaj do std::string cały ciąg, a następnie wybierz po kolei znaki i zamień sobie na int-y. Tak chyba najprościej.
Cytuj
Zamień liczbę na łańcuch znaków, podziel i parsuj (zamieniaj na liczbę całkowitą) przed wpisaniem do tabeli.
Zaiste, rozwiązanie godne programistów JavaScript (*) Co się stało z dzieleniem liczby przez 10 do skutku, eh? ;P

(*) Niczego im nie ujmując - sam się do nich zaliczam

Offline _user

  • Użytkownik

# Maj 06, 2015, 12:16:26
To Xion podaj jakies swoje oldschoolowe i ciezsze rozwiazanie tego problemu, chetnie bym sie o nim dowiedzial.

Offline Kyroaku

  • Użytkownik

  • +3
# Maj 06, 2015, 12:23:10
Już podał. A wcześniej zrobił to ArekBal.

Offline _user

  • Użytkownik

# Maj 06, 2015, 15:52:24
v += chars[i] * pow(10, i+1)
to zapisze tablice chars do zmiennej int v ? Do jakiej petli to wrzucic ?

oraz co zrobic jesli chce teraz zamienic tego inta na tablice znakow ?
« Ostatnia zmiana: Maj 06, 2015, 16:34:31 wysłana przez _user »

Offline mawpa

  • Użytkownik

  • +2
# Maj 06, 2015, 17:36:46
Cytuj
Do jakiej petli to wrzucic ?
Dowolnej.

Dlaczego mam wrażenie, że nie wkładasz żadnego wysiłku intelektualnego w rozwiązanie problemu, tylko strzelasz z nadzieją, że tym razem będzie dobrze? Może zamiast lecieć na forum i wypytywać o rzeczy, które masz podane na tacy (w tym wątku pojawiło się kilka sposobów rozwiązania obu tych zadań), spróbowałbyś zrozumieć, na czym polega to, co chcesz zrobić? Programowanie polega na uchwyceniu schematu działania danego mechanizmu - w tym przypadku zamiany liczby na tekst - i wykorzystaniu dostępnych narzędzi do odtworzenia tego schematu w programie. Z Twoich postów na forum można wywnioskować, że nie tylko nie wiesz, jak podejść do prostych problemów (wybaczalne u początkującego - i po to jest ten dział - ale bez przesady), ale tak naprawdę nie masz żadnego pojęcia o tym, do czego służą i jak działają tak podstawowe mechanizmy jak choćby pętle.

Tl;dr:
Cytuj
co zrobic jesli chce teraz zamienic tego inta na tablice znakow ?
Odpowiedź:
Cytuj
Co się stało z dzieleniem liczby przez 10 do skutku, eh? ;P
« Ostatnia zmiana: Maj 06, 2015, 17:39:10 wysłana przez mawpa »

Offline _user

  • Użytkownik

# Maj 06, 2015, 19:01:03
Nie wiem nic nie ogarnalem z twojego postu, dobra nie wazne, nie musze znac narazie rozwiazania ani uzywac tej metody skoro ma to tak bolec niektorych uzytkownikow.
« Ostatnia zmiana: Maj 06, 2015, 19:44:08 wysłana przez _user »

Offline mawpa

  • Użytkownik

  • +4
# Maj 06, 2015, 19:53:42
Cytuj
Nie wiem nic nie ogarnalem z twojego postu
Jakoś mnie to nie dziwi...

"Niektórych użytkowników" "boli" to, że Ciebie boli myślenie na własną rękę. Zakładasz tematy, które można streścić w ten sposób:
Cytuj
Napiszcie mi kod robiący XYZ, bo nie chce mi się myśleć ani poszukać w necie, jak można to zrobić. Nie zamierzam się zastanawiać, co robi kod, który mi podacie, może tylko rzucę na niego okiem i będę zgadywał w oderwaniu od kontekstu mojego żądania. Nie chce mi się próbować zrozumieć postów, które mają mnie naprowadzić na właściwy trop. Chcę dostać gotowe rozwiązanie. Resztę mam gdzieś.
Nie na tym polega programowanie. Chyba minąłeś się z powołaniem.

Offline _user

  • Użytkownik

# Maj 06, 2015, 20:00:00
ale o co ci chodzi ?

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

  • +1
# Maj 06, 2015, 20:07:46
Cytuj
ale o co ci chodzi ?

Prawdopodobnie o to:

Cytuj
"Niektórych użytkowników" "boli" to, że Ciebie boli myślenie na własną rękę. Zakładasz tematy, które można streścić w ten sposób:

Cytuj
Napiszcie mi kod robiący XYZ, bo nie chce mi się myśleć ani poszukać w necie, jak można to zrobić. Nie zamierzam się zastanawiać, co robi kod, który mi podacie, może tylko rzucę na niego okiem i będę zgadywał w oderwaniu od kontekstu mojego żądania. Nie chce mi się próbować zrozumieć postów, które mają mnie naprowadzić na właściwy trop. Chcę dostać gotowe rozwiązanie. Resztę mam gdzieś.

Offline _user

  • Użytkownik

# Maj 06, 2015, 20:14:33
ale ze co ?

Offline BrunonDEV

  • Użytkownik
    • Construgia -- RPG

  • +1
# Maj 06, 2015, 20:20:46
Cytuj
ale ze co ?

Czyli mam drugi raz zacytować wypowiedź @mawpa..?

--

Hm... Najwyraźniej nie ma sensu prowadzić z obecnym tu @_user dalszego dialogu, bo i tak do niczego to nie prowadzi.

Offline _user

  • Użytkownik

# Maj 06, 2015, 20:23:02
ale ze jak ??

Offline maro

  • Użytkownik

# Maj 06, 2015, 20:28:50
Cytuj
ale ze jak ??
Zapewne chodzi o te spacje, które stawiasz przed znakami zapytania.
To jest niepoprawne, tak się nie robi.

Offline timus

  • Użytkownik

  • +2
# Maj 06, 2015, 20:30:44
Zamiana tablicy char'ów na int(tylko liczny nieujemne, system dziesiętny) bez pointerów:
char chars[] = {'1','9','9','0','\0'};
int len = strlen(chars);
int v = 0;
for(int i = 0; i < len;i++)
v += (chars[i]-'0') * pow(10, len-i-1);

printf("%i", v);

Zamiana int'a na tablice char'ów(tylko liczny nieujemne, system dziesiętny) bez pointerów:
int v = 1990;
char output[32];
int i = 0;
while(v > 0)
{
output[i] = '0'+(v % 10);
v = v / 10;
i++;
}
output[i] = '\0';
strrev(output);//nie jest w standardzie c wiec możesz jej nie mieć, w googlu znajdziesz kilka implementacji

printf("%s", output);
Odejmowanie i dodawanie '0' służy jako konwersja ASCI na wartość liczbowa i vice versa.
Starałem się pisać tak aby kod był jak najprostszy do zrozumienia.