Pomoc z kodem, operacje na ciągach liczb

0

Witam,
czy dobra dusza podrzuci kod w C++?
Chodzi o program, który rozpisze bazę liczb wg zasady 3+3x2=9, 9+3x2=15, 15+3x2=21 itd.
Potem każda z tych liczb ma być pomnożona przez siebie. Ustalamy liczbę liczb, które mają być wygenerowane wg tej zasady (w tym przypadku 36 liczb ):
3
9
15
21
27
33
39
45
51
57
63
69
75
81
87
93
99
105
111
117
123
129
135
141
147
153
159
165
171
177
183
189
195
201
207
213
Teraz każda z tych liczb ma być przemnożona przez siebie, czyli: 3x3=9, 3x9=27... 27x27=729, 27x33=891 itd (wszystkie kombinacje mnożeń, proces mnożenia ma być przerwany jeżeli wynik mnożenia > największa wygenerowana liczba z podstawowej bazy czyli iloczyn musi być mniejszy niż 213, jak przekroczy to nie liczy dalej tych par kombinacji czyli przy 27x27 ma już nie sprawdzać potem 27x33).
Potem program porównuje obie bazy liczb i wykreśla w bazie podstawowej te liczby, które powstały w nowej bazie po mnożeniu: czyli w tym przypadku wypisał by liczby z bazy podstawowej bez 9 i 27.
Ktoś pomoże?

1

Oczekujesz wykonania zadania za Ciebie (zaproponuj cenę), czy pomocy? Jeśli tego drugiego, pokaż co już masz.

0

Nie mówiąc o tym, że problem jest opisany tak, że po 4 krotnym przeczytaniu nie jestem pewien o co chodzi.

0

"Chodzi o program, który rozpisze bazę liczb wg zasady 3+3x2=9, 9+3x2=15, 15+3x2=21 itd.
Potem każda z tych liczb ma być pomnożona przez siebie. Ustalamy liczbę liczb, które mają być wygenerowane wg tej zasady (w tym przypadku 36 liczb ):"

Napisz testy np. w gtest, następnie kod.

0
kq napisał(a):

Oczekujesz wykonania zadania za Ciebie (zaproponuj cenę), czy pomocy? Jeśli tego drugiego, pokaż co już masz.

Może jestem dinozaurem, ale pamiętam, że ludzie sobie kiedyś pomagali. Nie jestem programistą i nie będę -mam inne zainteresowania, natomiast wydaje mi się, że program jest prosty do ogarnięcia dla osoby doświadczonej. Rozumiem, że nikt za darmo nie chciał by napisać takiego kodu jako rozwiązanie mojego problemu?

2

Nie. Lubimy pomagać, ale pomagać oznacza że sam próbowałeś rozwiązać problem. Natomiast robienie zadania za kogoś nie jest pomocą.

0

Bardzo chętnie pomagamy. Tylko Ty oczekujesz, że przyjdziesz do stolarza i powiesz "zrób mi (prosty) stół". My zaś, jako stolarze w tej analogii, oczekujemy, że za wykonanie stołu zapłacisz - albo przyjdziesz ze swoim zdeformowanym projektem, który bardzo chętnie za darmo pomożemy naprostować.

0
MarekR22 napisał(a):

Nie mówiąc o tym, że problem jest opisany tak, że po 4 krotnym przeczytaniu nie jestem pewien o co chodzi.

kq napisał(a):

Oczekujesz wykonania zadania za Ciebie (zaproponuj cenę), czy pomocy? Jeśli tego drugiego, pokaż co już masz.

Może jestem dinozaurem, ale pamiętam, że ludzie sobie kiedyś pomagali. Nie jestem programistą i nie będę -mam inne zainteresowania, natomiast wydaje mi się, że program jest prosty do ogarnięcia dla osoby doświadczonej. Rozumiem, że nikt za darmo nie chciał by napisać takiego kodu jako rozwiązanie mojego problemu?
Być może zawile to wytłumaczyłem, ale nie jestem też matematykiem. Program ma wygenerować bazę liczb wg wzoru a potem te liczby z bazy przemnożyć przez siebie i wyniki (liczby, które powstaną z mnożenia) wykreślić z podstawowej bazy (jeżeli tak się trafi, że wynik mnożenia dwóch liczb z bazy podstawowej da też liczbę  z bazy podstawowej.
Cyli jeżeli baza zawiera przykładowe 3 liczby:
3,9,27
to program ma pomnożyć 3x3,3x9,3x27,9x27
W tym przypadku wyjdzie 9, 27, 81, 243
Ponieważ 2 pierwsze wyniki mnożenia to 9 i 27 to wykreśla te liczby z bazy podstawowej i wyświetla ją w wyniku bez tych dwóch liczb, czyli wyświetli tylko 3 bo 9 i 27 wykreśli z bazy. Oczywiście program ma w tym przypadku nie mnożyć już 3x27,9x27 bo wyniki przekraczają największą liczbę w bazie podstawowej (27).

0
L23 napisał(a):
kq napisał(a):

Oczekujesz wykonania zadania za Ciebie (zaproponuj cenę), czy pomocy? Jeśli tego drugiego, pokaż co już masz.

Może jestem dinozaurem, ale pamiętam, że ludzie sobie kiedyś pomagali. Nie jestem programistą i nie będę -mam inne zainteresowania, natomiast wydaje mi się, że program jest prosty do ogarnięcia dla osoby doświadczonej. Rozumiem, że nikt za darmo nie chciał by napisać takiego kodu jako rozwiązanie mojego problemu?

Oczywiście że jest do ogarnięcia. Tylko nikomu nie chce się analizować jakichś barowych szarad dla nieznanej im osoby żeby mogła zabłysnąć wśród kolegów.

0

Nie chcę zabłysnąć wśród kolegów, chcę coś sprawdzić. Niestety nie stać mnie na zapłacenie za taki kod, ale może jest ktoś kto zrobi to dla funu nie dla kasy?

0

Pierwsze, żeby opisać procedurę trzeba być matematykiem? Chłopie ty mówisz o jakieś bazie itd. Czyli co trzeba napisać obsługę bazy albo zaprojektować takie API żeby to później sprzęgnąć. Jeszcze raz nikt ci tego tu nie napisze, nie chodzi o to że to trywialne czy nie a o zasadę. Daremnie piszesz.
Moja rada to co mówisz jest do zrobienia w.... excelu. Do tego excel łatwo spiąć z accesem(z mysql pewnie też). Znajdź kurs do excela i vba(ba tu nawet by nie trzeba vba jak wszystko będziesz trzymał w tym arkuszu, tylko pokombinować z warunkami). Poczytaj i jedziesz.

edit:
" ale może jest ktoś kto zrobi to dla funu nie dla kasy?"
dla fun to my piszemy w open source....

0
atmal napisał(a):

Nie. Lubimy pomagać, ale pomagać oznacza że sam próbowałeś rozwiązać problem. Natomiast robienie zadania za kogoś nie jest pomocą.

Rozumiem, ale moja wiedza skończyła się na Pascalu w liceum, za mało pamiętam by to ogarnąć :(

0
revcorey napisał(a):

Pierwsze, żeby opisać procedurę trzeba być matematykiem? Chłopie ty mówisz o jakieś bazie itd. Czyli co trzeba napisać obsługę bazy albo zaprojektować takie API żeby to później sprzęgnąć. Jeszcze raz nikt ci tego tu nie napisze, nie chodzi o to że to trywialne czy nie a o zasadę. Daremnie piszesz.
Moja rada to co mówisz jest do zrobienia w.... excelu. Do tego excel łatwo spiąć z accesem(z mysql pewnie też). Znajdź kurs do excela i vba(ba tu nawet by nie trzeba vba jak wszystko będziesz trzymał w tym arkuszu, tylko pokombinować z warunkami). Poczytaj i jedziesz.

edit:
" ale może jest ktoś kto zrobi to dla funu nie dla kasy?"
dla fun to my piszemy w open source....

Ok, mając na myśli bazę mam na myśli zbiór wielu liczb (tablica w C++?)

0

Jeśli znasz Pascala to polecam ściągnąć sobie Lazarus/Free Pascal:
https://www.lazarus-ide.org/

Jeśli wiesz o co chodzi to to zadanie rozwiążesz w 1h. Szybciej niż nam to wytłumaczysz.

0

Masz Excela czyli zbiór liczb. Następnie wykonujesz działania matematyczne w kolumnach excela i masz wynik. Tyle. Nie wiem po co ci C++?

0

Spoko, dzięki za odpowiedź :), tylko mam problemy techniczne...
Wygenerowanie ciągów liczb wg wzoru jest oczywiście banalne, ale potem te liczby mają być we wszystkich kombinacjach mnożone przez siebie (jaka funkcja?).

0

Ostatni raz postaram się wytłumaczyć, bo nie wydaje mi się to trudne. Jeżeli macie jakieś doświadczenie i wiecie z czym będę miał problemy podczas budowy takiego programu to proszę podzielcie się tą wiedzą.

Działanie programu:

Podaj liczbę elementów do budowy bazy: 4
/generuje ciąg liczb wg wzoru np.: 3,9,27,57 i przechowuje
/mnoży przez siebie liczby: 3x3=9 (sprawdza czy wynik jest mniejszy niż największa liczba w bazie "57", jest więc zapisuje w pamięci wynik "9" i mnoży dalej)
3x9=27 (sprawdza czy wynik jest mniejszy niż największa liczba w bazie "57", jest więc zapisuje w pamięci wynik "27" i mnoży dalej)
3x27=81 (sprawdza czy wynik jest mniejszy niż największa liczba w bazie "57", nie jest więc nie zapisuje i nie mnoży dalej)
/program teraz przechowuje 2 ciągi liczb: 3,9,27,57 (pierwotny ciąg) oraz 9 i 27 (ciąg liczb z mnożenia)
/porównuje oba ciągi i wyświetla pierwszy ciąg liczb,bez tych otrzymanych w drugim ciągu (w obu ciągach pojawiają się 9 i 27 więc usuwa z pierwszego ciągu te 2 liczby (9,27)
Wynik: 3,57

0

Ok, thx :/ Chwyciłem za Symfonię... W sumie chciałem nauczyć się C++
Mam do was 2 pytania jeszcze:

•Czy po zbudowaniu tablicy i umieszczeniu w niej wartości można OZNACZYĆ daną komórkę tablicy? Chodzi o to by program pod koniec wypisał wartości z komórek, prócz tych oznaczonych przez program w trakcie pracy?

•Jak najbardziej elegancko rozpisać kod na tworzenie jednego zbioru liczb wg zastosowania 2 różnych wzorów. Na przykład chcę stworzyć ciąg liczb wg zasady:
x+3,x+2
Wynik miałby dać: 1+3=4, 4+2=6, 6+3=9, 9+2=11............. (wynik poprzedniego działania +3, wynik poprzedniego działania + 2)

Pozdro :)

0
L23 napisał(a):

Ok, thx :/ Chwyciłem za Symfonię... W sumie chciałem nauczyć się C++
Mam do was 2 pytania jeszcze:

•Czy po zbudowaniu tablicy i umieszczeniu w niej wartości można OZNACZYĆ daną komórkę tablicy? Chodzi o to by program pod koniec wypisał wartości z komórek, prócz tych oznaczonych przez program w trakcie pracy?

•Jak najbardziej elegancko rozpisać kod na tworzenie jednego zbioru liczb wg zastosowania 2 różnych wzorów. Na przykład chcę stworzyć ciąg liczb wg zasady:
x+3,x+2
Wynik miałby dać: 1+3=4, 4+2=6, 6+3=9, 9+2=11............. (wynik poprzedniego działania +3, wynik poprzedniego działania + 2)

Pozdro :)

Jesteście nieocenieni, dzięki za nic.

0

•Czy po zbudowaniu tablicy i umieszczeniu w niej wartości można OZNACZYĆ daną komórkę tablicy? Chodzi o to by program pod koniec wypisał wartości z komórek, prócz tych oznaczonych przez program w trakcie pracy?

Nie wiem jakie są założenia do tego zadania, ale w przykładach które podałeś nie występują 0 i liczby ujemne. Możesz np. ustawić niechcianą komórkę na 0 lub -1 jeżeli już jest niepotrzebna i przy wypisywaniu tablicy brać tylko te niezerowe. Jeżeli potrzebujesz jeszcze tych komórek, możesz stworzyć pomocniczą tablicę typu bool. To chyba najprostsze sposoby (są też inne).

0
Potat0x napisał(a):

•Czy po zbudowaniu tablicy i umieszczeniu w niej wartości można OZNACZYĆ daną komórkę tablicy? Chodzi o to by program pod koniec wypisał wartości z komórek, prócz tych oznaczonych przez program w trakcie pracy?

Nie wiem jakie są założenia do tego zadania, ale w przykładach które podałeś nie występują 0 i liczby ujemne. Możesz np. ustawić niechcianą komórkę na 0 lub -1 jeżeli już jest niepotrzebna i przy wypisywaniu tablicy brać tylko te niezerowe. Jeżeli potrzebujesz jeszcze tych komórek, możesz stworzyć pomocniczą tablicę typu bool. To chyba najprostsze sposoby (są też inne).

Wielkie dzięki! Tylko, ża ja będę potrzebował zawartość tej komórki do obliczeń, nie mogę jej zmienić, chcę tylko ją oznaczyć.

0
Potat0x napisał(a):

•Czy po zbudowaniu tablicy i umieszczeniu w niej wartości można OZNACZYĆ daną komórkę tablicy? Chodzi o to by program pod koniec wypisał wartości z komórek, prócz tych oznaczonych przez program w trakcie pracy?

Nie wiem jakie są założenia do tego zadania, ale w przykładach które podałeś nie występują 0 i liczby ujemne. Możesz np. ustawić niechcianą komórkę na 0 lub -1 jeżeli już jest niepotrzebna i przy wypisywaniu tablicy brać tylko te niezerowe. Jeżeli potrzebujesz jeszcze tych komórek, możesz stworzyć pomocniczą tablicę typu bool. To chyba najprostsze sposoby (są też inne).

Ostatnie pytanie.
Podaję zakres
Tworzę tablicę zakres+1
Chcę teraz wypełnić tablicę takim ciągiem: od x=4 x+3;x+3;x+7
Jak powinna wyglądać instrukcja generująca 7 10 17... do kolejnych komórek tablicy?
Nie mogę zapisać tak przecież

for(int i>=4; i<zakres; i+3 i+3 i+7)
tab[i] = 4;

2
    const int XSIZE = 3;
    int x[XSIZE] = {3, 3, 7};
    int a0 = 4;

    for(int i = 0, an = a0; i < 10 ; i++)
    {
        an += x[i%XSIZE];
        cout<<an<<endl;
    }
0
Potat0x napisał(a):
    const int XSIZE = 3;
    int x[XSIZE] = {3, 3, 7};
    int a0 = 4;

    for(int i = 0, an = a0; i < 10 ; i++)
    {
        an += x[i%XSIZE];
        cout<<an<<endl;
    }

Dzięki :)
Dałbyś komentarze co robi każda instrukcja bym się czegoś nauczył?

1

Na początku wyjaśnię [i % XSIZE] - dzięki temu dostajesz się do odpowiedniego indeksu z tablicy x.
Dla:
i = 0, i % 3 (XSIZE) = 0
i = 1, i % 3 = 1
i = 2, i % 3 = 2
i = 3, i % 3 = 0
i = 4, i % 3 = 1
i tak dalej

Następnie pobierasz wartość z tego indeksu i dodajesz do zmiennej an.

0
atmal napisał(a):

Na początku wyjaśnię [i % XSIZE] - dzięki temu dostajesz się do odpowiedniego indeksu z tablicy x.
Dla:
i = 0, i % 3 (XSIZE) = 0
i = 1, i % 3 = 1
i = 2, i % 3 = 2
i = 3, i % 3 = 0
i = 4, i % 3 = 1
i tak dalej

Następnie pobierasz wartość z tego indeksu i dodajesz do zmiennej an.

OK, spoko.
Śmiesznie :) Jednak po skompilowaniu wydaje się bardzo powolną metodą dla procesora. Da się przyśpieszyć tworzenie takiej tablicy tracąc na elegancji?

0

Można niby zastąpić to switch-case'em (choć nie wiem czy będzie to szybsze czy też nie)

// W pętli:
int remainder = i % 3;
switch (remainder)
{
	case 1: // Gdy nie ma break, case "pochłonie" następny dopóki nie spotka break
	case 2: // Więc gdy dostaniemy case 1: wykona nam się case 2:
		an += 3; // Co można zrobić z racji że chcemy 3 w obu przypadkach
		break; // Wyjście ze switch-case
	case 3:
		an += 7;
		break;
}

Ale nie przejmowałbym się optymalizacją na tym etapie i użyłbym tego co napisał @Potat0x

0
atmal napisał(a):

Można niby zastąpić to switch-case'em (choć nie wiem czy będzie to szybsze czy też nie)

// W pętli:
int remainder = i % 3;
switch (remainder)
{
	case 1: // Gdy nie ma break, case "pochłonie" następny dopóki nie spotka break
	case 2: // Więc gdy dostaniemy case 1: wykona nam się case 2:
		an += 3; // Co można zrobić z racji że chcemy 3 w obu przypadkach
		break; // Wyjście ze switch-case
	case 3:
		an += 7;
		break;
}

Dzięki za pomoc! Ostatnie pytania i wątek do zamknięcia:
rozumiem, że tworzysz tablicę i umieszczasz w niej wyniki? Czy ta tablica to XSIZE? Druga kwestia to jak wprowadzić w tym rozwiązaniu licznik tzn chcę by generował liczby do danego zakresu an<=zakres.

1

XSIZE to rozmiar tablicy. @Potat0x mądrze zadeklarował rozmiar jako stałą używając słówka kluczowego const od angielskiego constant co oznacza stała. Dzięki temu że jest to stała, kompilator nie pozwoli na zmianę jej wartości.

Dopiero później tworzona jest tablica, łatwo to rozpoznać po kwadratowych nawiasach za nazwą w których to definiuje się jej rozmiar, do niej umieszczane są liczby 3, 3 oraz 7 (klamry).

Wynik masz w zmiennej an i to jest ostatnia liczba wygenerowana w pętli. Tutaj ziemniak dał ciała ( :D ) bo Ty chcesz aby te wyniki trafiały do tablicy, tymczasem są one tylko wyświetlane na ekranie. Tablica została użyta do tych trzech liczb które są naprzemiennie dodawane do ostatniej liczby.

I co do generowania liczb do pewnego zakresu, ja zrobiłbym to tak:

#define RESULTS_SIZE 20
int main() 
{
    const int MAX = 27; // Tutaj zakres
    const int XSIZE = 3;
    int add[] = {3, 3, 7};

    int result[RESULTS_SIZE]; // Tablica 20 elementów dla wyniku

    int number = 4; // Pierwsza liczba
    int index = 0; // Indeks dla tablicy result
    do // Do-while wykona się przynajmniej raz
    {
        result[index] = number; // Przypisanie number do tablicy pod indeksem 'index'
        index++; // Inkrementacja indeksu
        if(index == RESULTS_SIZE) // Jeżeli dotarliśmy do końca tablicy
        {
            break; // Wychodzimy z pętli
        }
        number += add[index % XSIZE]; // Generowanie kolejnej liczby
    } while(number <= MAX); // Dopóki liczba mieści się w zakresie
}

Tablica result ma 20 miejsc więc w zależności od zakresu może wystarczyć a może nie. W przypadku gdy brakuje nam miejsc z tablicy wychodzimy z pętli.

Później możesz bawić się z vectorami tak abyś nie musiał z góry znać ile miejsc w tablicy potrzebujesz.

0
atmal napisał(a):

XSIZE to rozmiar tablicy. @Potat0x mądrze zadeklarował rozmiar jako stałą używając słówka kluczowego const od angielskiego constant co oznacza stała. Dzięki temu że jest to stała, kompilator nie pozwoli na zmianę jej wartości.

Dopiero później tworzona jest tablica, łatwo to rozpoznać po kwadratowych nawiasach za nazwą w których to definiuje się jej rozmiar, do niej umieszczane są liczby 3, 3 oraz 7 (klamry).

Wynik masz w zmiennej an i to jest ostatnia liczba wygenerowana w pętli. Tutaj ziemniak dał ciała ( :D ) bo Ty chcesz aby te wyniki trafiały do tablicy, tymczasem są one tylko wyświetlane na ekranie. Tablica została użyta do tych trzech liczb które są naprzemiennie dodawane do ostatniej liczby.

I co do generowania liczb do pewnego zakresu, ja zrobiłbym to tak:

#define RESULTS_SIZE 20
int main() 
{
    const int MAX = 27; // Tutaj zakres
    const int XSIZE = 3;
    int add[] = {3, 3, 7};

    int result[RESULTS_SIZE]; // Tablica 20 elementów dla wyniku

    int number = 4; // Pierwsza liczba
    int index = 0; // Indeks dla tablicy result
    do // Do-while wykona się przynajmniej raz
    {
        result[index] = number; // Przypisanie number do tablicy pod indeksem 'index'
        index++; // Inkrementacja indeksu
        if(index == RESULTS_SIZE) // Jeżeli dotarliśmy do końca tablicy
        {
            break; // Wychodzimy z pętli
        }
        number += add[index % XSIZE]; // Generowanie kolejnej liczby
    } while(number <= MAX); // Dopóki liczba mieści się w zakresie
}

Tablica result ma 20 miejsc więc w zależności od zakresu może wystarczyć a może nie. W przypadku gdy brakuje nam miejsc z tablicy wychodzimy z pętli.

Później możesz bawić się z vectorami tak abyś nie musiał z góry znać ile miejsc w tablicy potrzebujesz.

Dzięki za Wasz czas Panowie!

1 użytkowników online, w tym zalogowanych: 0, gości: 1