[C++] Przepisanie jednej tablicy do drugiej

Witam!

Otóż muszę przecisać zawartość jednej tablicy z liczbami 1 i 2 cyfrowymi do drugiej tablicy w której były by liczby 4 cyfrowe (wcześniejsza konwersja jedno cyfrowych do dwu np. 1 - 01)

np. tab1={10, 1, 5, 52, 41, 14, 2, 6, 17, 0};

tab2={1001, 0552, 4114, 0206, 1700};

Proszę o pomoc, bo nie mam pomysłu na funkcję…

Coś w stylu 100*tab1 + tab1[i+1] ? Przynajmniej na podstawie przykładowych danych tuszę, że o to CI chodzi. No bez przesady, wystarczy chwila pomyślunku…

To nie o to w tym zadaniu chodzi :slight_smile: Musisz to chyba na stringach zrobić… tak będzie chyba najłatwiej.

Bourbon_Kid , nie ma sensu robić tego na stringach. To co podał nr47 zadziała poprawnie, jak potrzebne jednak te zera z przodu to można to skonwertować podczas użycia.

rafalski , czy wiesz że 0552 to nie to samo co 552 ?

0552 to liczba w systemie ósemkowym i jest równa 362

@Bourbon_Kid

nr47 b. dobrze kombinuje. Właśnie o to w tym zadaniu chodzi. W zasadzie pokazał sposób na połowę zadania. Druga połowa to napisanie funkcji, która przekształci liczbę na string i dopisze niezbędne 0. Trzeba też uwzględnić sytuację, gdy tab1 będzie zawierać nieparzystą ilość liczb. Wówczas może się okazać konieczne dopisanie 2 lub 3 zer przed daną liczbą.

No cóż najwyraźniej źle pomyślałem :slight_smile: ale ja bym zrobił z tego stringa dał z dwa if’y(jeden sprawdza czy to liczba ,‘i’ czy ‘i+1’ a drugi czy liczba jest większa od 9) i na tej podstawie dodał w odpowiednim miejscu 0, następnie bym złączył tab_+tab[i+1], po czym z powrotem bym to skonwertował do int’a. Ale z tego co widzę moje rozwiązanie jest bardziej skomplikowane, a więc niewłaściwe zapewne :)_

Bourbon_Kid , właściwie o ile wynikiem ma być string (czego nie wiemy a zakładam że się mylisz) to twoje podejście okaże się może nieco dłuższe ale najbardziej optymalne czasowo, oczywiście po pewnym “dopracowaniu”:

char str[5]={0};

str[0]=tab1_/10+‘0’;_

str[1]=tab1_%10+‘0’;_

str[2]=tab1[i+1]/10+‘0’;

str[3]=tab1[i+1]%10+‘0’;

Ja nie twierdze, że na wyjściu ma być tablica stringów :slight_smile: powiedziałem, że po złączeniu wypadałoby zrobić z powrotem int’a. a samo zadanie jest tu słabo opisane, dlatego trudno stwierdzić jakie rozwiązanie jest ,najwłaściwsze" :slight_smile:

To w takim razie twój pomyśl jest kompletnie bez sensu, ponieważ wg wersji nr47 masz int’a natychmiast, bez konwersji tam i z powrotem.

I tak i nie… powiedziałem, że zadanie jest źle opisane :slight_smile: z tego co jest podane wynika, że tab2 ma składać się z liczb 4-cyfrowych… Rozwiązanie nr47 dopuszcza powstawanie liczb 3-cyfrowych. Więc tak jak powiedziałem z tych początkowych informacji trudno jednoznacznie wskazać rozwiązanie, dlatego jeśli łaska nie mów, że coś jest kompletnie bezsensu, nie mając wystarczających podstaw do tego typu stwierdzeń.

Owszem mam wystarczająco podstaw, bo napisałeś: - " po złączeniu wypadałoby zrobić z powrotem int’a" czyli w sumie będziesz mieć te same 3-cyfrowe liczby dokładnie tam gdzie wersja od nr47 będzie ich mieć, z tym że o wiele większym kosztem czasowym i o wiele większym rozmiarem kodu.

A i owszem nie :slight_smile: powiedziałem, że trzeba zrobić if’y aby wstawić zero w odpowiednie miejsce… :slight_smile: proponuję czytać dokładniej i podkreśle raz jeszcze, że moje rozwiązanie wcale nie jest i nie musi być optymalnym, lecz na pewno nie jest bezsensu.

@rafalski

Jak ostatecznie rozwiązałeś swój problem?

Przegrzałeś się czy co?

Uprość my nieco zadanie masz deklaracje:

int x=123;

pokaż mi jak trzeba zastosować if’a aby wstawić zero przed jedynką.

To chyba Ty się przegrzałeś… Nie jest napisane w którym miejscu masz wstawić 0, a co za tym idzie możesz wstawić je za jedynką a możesz wstawić przed jedynką… Przed jedynką jest bez sensu przynajmniej w systemie dziesiętnym.

Bourbon_Kid , chyba z tobą to tylko na przykładach.

Podaj dowolny przykład wartości x i y przy którym wersja od nr47 czyli:

z=100*x+y;

da inny wynik niż twoja wersja z tym “zrobieniem z powrotem int’a”.

Przyjmijmy że przechodzimy do tab1[2] = 5, a więc 100*5 + 52 = 552. Ja bym na if wstawił ,0" za ,5" a wartości tab1[3] w ogóle nie zmieniał(bo zgodnie z poleceniem jest dwucyfrowa) i bym dostał 5052 tak aby uzyskać liczbę czterocyfrową. Oczywiście można zrobić to bez użycia stringów na samych int’ach i if’ach, ale pierwsze co mi przyszło do głowy to takie rozwiązanie i nie jest ono bezsensu :). Powtórzę raz jeszcze, że zadanie nie jest dobrze opisane i ja przyjąłem jako warunek konieczny uzyskanie (zawsze) liczby czterocyfrowej, przy wstawianiu jedynie 0 do liczb z tab1, aby uzyskiwać dwucyfrowe składowe dla tab2.

@Bourbon_Kid

Jeśli w tab1 będą tylko dwie liczby, np. 5, 52 , to w tab2 powinien się znaleźć ciąg znaków 0552 (wynika to z przykładu, który umieścił autor tematu w pierwszym swoim poście).

Jedyne w tym zadaniu o czym nie można zapomnieć to to, że tab1 może zawierać nieparzystą ilość liczb (o czym już pisałem). Jeśli np. tab1 zawiera takie liczby 52, 5, 3 , to w tab2 powinny się znaleźć 5205, 0003

Okey myliłem się :slight_smile: mój pomysł był bezsensu… A takie małe pytanie: skąd wiesz, że w przypadku nieparzystej ilości liczb trzeba zrobić to co zaproponowałeś? jak już tak dokładnie analizować co on podał to co najwyżej wtedy powstanie 0300. Nie ma co gdybać, bo zadanie jest proste, przy okazji nie sprecyzowane i rozwiązać można je na wiele sposobów… który jest bezsensu, a który jest najlepszy niech oceniają mądrzejsi ode mnie!

Pozdro

@Bourbon_Kid

Ja nie mówię, czy się myliłeś, czy nie odnośnie samego algorytmu. Szczerze to nie czytałem całej Twojej dyskusji z [alex]. IMO debatowanie nad takim programem to lekka przesada :). Odniosłem się tylko do Twojego ostatniego komentarza, bo autor wyraźnie zaznaczył, że jeśli jest 5,52 to w wyniku powinno być 0552. Masz rację co do tego, że nie wiadomo, czy powinno być 0003, czy 0300, gdy ostatnią nieparzystą liczbą w tab1 jest 3. To jest faktycznie nieprecyzyjnie opisane (choć moja magiczna kula mówi mi, że chodzi o 0003), ale reszta wydaje się być jasna.