• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

jak zabrać się za takie zadanie?

VPS Starter Arubacloud
+1 głos
586 wizyt
pytanie zadane 15 kwietnia 2015 w C i C++ przez gotos Nowicjusz (160 p.)
Witam,

Stawiam dopiero pierwsze kroki w programowaniu c++ mam za sobą cztery filmy Pana Mirosława i bardzo mnie wkręciły :) Kiedyś wpadł mi do głowy takie zadanie, "problem", być może rozwiążę to sam za jakiś czas, ale może mogę liczyć na jakieś wskazówki jak się za to zabrać.

Mam ciąg liczbowy 3, 7, 12, 18, 25 itd czyli o postać a(n) = n(n+5)/2

chciałbym ten ciąg przedstawić w kolumnie w taki sposób

       A   B  C

id (1)  3, 7, 12

id (2) 18, 25, 33

id (3) 42, 52, 63

itd...

wiem, że poszczególne kolumny powstają z wzorów:

"A" ma postać a(n)=3/2(3n^2+n-2)

"B" ma postać a(n)=1/2(9n^2+9n-4)

"C" ma postać a(n)=3/2n(3n+5)

następnie chciałbym znaleźć taki id(n) który jest podzielny przez id(1) dla każdego A, B, C bez reszty

wiem, że id 8) będzie miał postać A=297, B=322, C=348

czyli A=297 podzielę przez A=3, B=322 podzielę przez B=7 i C=348 podzielę przez C=12 otrzymam wyniki całkowite. czyli id (8) dzieli się przez id (1)

Czyli chodzi o to by szereg id(n) dla poszczególnych kolumn A dzieliła się przez 3, kolumna B przez 7 kolumna C przez 12 dając liczby całkowite.

wyników będzie nieskończenie dużo, więc będę musiał dać im ograniczenie, powiedzmy do 10 wyników.

podsumowując by wynik wyglądał w ten sposób

       A  B  C

id 1) 3, 7, 12

id 8) 297, 322, 348

id n) ...

(mam dalsze plany odnośnie otrzymanych wyników ale o nich później)

Pozdrawiam,

Maciej

3 odpowiedzi

0 głosów
odpowiedź 17 kwietnia 2015 przez Mateusz Dalgiewicz Mądrala (5,270 p.)
wybrane 17 kwietnia 2015 przez gotos
 
Najlepsza

Co do tych wzorów nie możesz tego zrobić w taki sposób ponieważ kompilator zaprotestuje.

 id[i][0] = 3/2(3n^2+n-2);
 id[i][1] = 1/2(9n^2+9n-4);
 id[i][2] = 3/2n(3n+5);

Aby zapisywać tego typu wzory w programowaniu musisz użyc odpowiednich funkcji oraz operatorów. Niestety kompilator nie jest tak intuicyjny jak ludzki mózg i trzeba mu konkretnie za pomocą odpowiedniej składni języka powiedzieć co ma robić. Aby podnieść liczbę do potęgi musisz załączyc odpowiednią bibliotekę czyli <cmath> oraz użyc funkcji pow(a,b) gdzie a to podstawa a b to wykładnik potęgi. Również mnożać liczby nie możesz używać takiego zapisu "2na" a użyc odpowiendiego operatora czyli "2*a*n".  Polecam Ci również abyś skorzystał z kursów lub nabył jakąś dobrą książke do postaw c++ bo bez tego nie ruszysz dalej.

Twoje wzory powinny wyglądać w taki sposób:

#include <cmath> //załączasz bibliotęke zawierąjącą podstawowe funkcje oraz stałe matematyczne

 id[i][0] =  3/(2(3*pow(n,2)+n-2));
 id[i][1] = 1/(2*(9*pow(n,2)+9*n-4));
 id[i][2] = 3/(2*n*(3*n+5));

+1 głos
odpowiedź 15 kwietnia 2015 przez bossik21 Mądrala (5,750 p.)

Z wypełnieniem tej tablicy sobie poradziłeś? Jeśli nie  to :
 

//składnia javowa
int n = 10;
int[][] id = new int[n][3];
for (int i = 0 ; i < 10 ; i++)
{
  id[i][0] = wzor_na_A
  id[i][i] = wzor_na_B
  id[i][2] = wzpr_na_C
}

 

Wiesz co to jest dzielenie modulo? Bo to jest kluczem do twojego rozwiazania:

for (int i = 1 ; i < n ; i++)
{
    if (id[i][0]% id[0][0] == 0 )
     if (id[i][1]% id[0][1] == 0 )
       if (id[i][2]% id[0][2] == 0 )
        {
               // to jest twoje szukane id, poniewaz wartosci modulo dzielen kazdej kolumny daly 0

        }
}

 

Z wypisywaniem wyniku na pewno sobie poradzisz :)

komentarz 15 kwietnia 2015 przez gotos Nowicjusz (160 p.)
Dziękuję Wam za wskazówki:)

będę się w temat wgryzał dalej, jak mówiłem nie chcę pełnego rozwiązania, bo się uczę. Muszę nauczyć się myślenia programowego, tak jak słusznie zauważyłeś Mateuszu, rozbiję sobie to na podproblemy. Bossik21 dzięki za wskazówkę, tak wiem co to jest modulo :)
komentarz 16 kwietnia 2015 przez gotos Nowicjusz (160 p.)
To mnie jakoś przerosło... próbowałem to rozbić na problemy, jak słusznie to proponował kolega Mateusz

ale próbuję zrozumieć co tu jest na początku podane

int n = 10;                     // rozumiem, że to ten ogranicznik, mam wykazać dziesięć                                                 szeregów
int[][] id = new int[n][3];  // to jest wygląd tabeli czyli szeregi id "n", wykaże mi ich 10  no i                                         oczywiście 3 kolumny

for (int i = 0 ; i < 10 ; i++)  / /pętla dla 10 szeregów szukanych id

no dobrze ale jak wpiszę dalej, podstawię te wzory w ten sposób to mam błąd

  id[i][0] = 3/2(3n^2+n-2);
  id[i][1] = 1/2(9n^2+9n-4);
  id[i][2] = 3/2n(3n+5);

   for (int i = 1 ; i < n ; i++) //pętla tak rozumiem
{
    if (id[i][0]% id[0][0] == 0 ) // modulo zrozumiałem
    if (id[i][1]% id[0][1] == 0 )
    if (id[i][2]% id[0][2] == 0 )
        {

widocznie trzeba to jakoś zamknąć i jeszcze uwidocznić na ekranie, może użyć komendy cout nie wiem co mam z tym dalej zrobić wydawało się to takie proste, na pewno jest to proste ale jeszcze nie ogarniam. Pozostaje mi napatrzeć się i poznać kolejne odcinki tutoriali o programowaniu... może wtedy coś mi się w tej pustej głowie odblokuje ;)
0 głosów
odpowiedź 15 kwietnia 2015 przez Mateusz Dalgiewicz Mądrala (5,270 p.)
Witaj,
 

Sposobów na rozwiązanie tego zadania jest conajmniej nieskończoność :) Rozbij sobie ten problem na podproblemy. Postaraj się napisac cokolwiek wtedy będziemy mieli jakiś punkt odniesienia zeby Ci pomóc. Bo dawać gotowy kod to też troche bez sensu :)

1) napisz oddzielne funckje dla każdego wzoru
2) Zastanów sie w jaki sposób zapisywać wyniki (może by to tablica)
3) W celu znalezienia id(n) ktory spełnia twoj warunek (w tym wypadku id(n) podzielny bez reszty przez id(m)) mozesz zastosować dzielenie modulo czyli np:
    if(id(n)%id(m) == 0) to coś tam wykonuj

Zrob cokolwiek a wtedy polecimy dalej :)

Podobne pytania

0 głosów
0 odpowiedzi 80 wizyt
0 głosów
0 odpowiedzi 175 wizyt
0 głosów
3 odpowiedzi 865 wizyt

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...