1 / 11
Jul 2017

Cześć!
Dopiero zaczynam przygodę programowaniem i chciałbym wiedzieć gdzie popełniam błąd w swoim kodzie...Zakładam, że tkwi on w tej pętli :sweat_smile:

Za wszelkie odpowiedzi, dzięki!

include

using namespace std;

int main()
{
int a, b, c, d, n; //4 liczby + n-ta ilość prób do wykonania na nich

int pom1, pom2, pom3, pom4; //zmienne, które chciałbym potraktować jako "zbiory" większe od 1 i mniejsze od danej zmiennej.

cin>>a>>b>>c>>d; //wprowadzanie zmiennych na których będą wykonywane "testy"
cout<<endl;

cin>>n;                    //ilość testów

(pom1>1)&&(pom1<a); //uwarunkowanie zmiennych, zawierając je w przedziałach opisanych powyżej
(pom2>1)&&(pom2<b);
(pom3>1)&&(pom3<c);
(pom4>1)&&(pom4<d);

string tablica[n]; //tablica string, która będzie przechowywała odpowiedzi, czy liczby są pierwsze

for(int i=0; i<n; i++) //czas na najgorsze... :sweat_smile:
{
if(a%pom1!=0) //Jeśli podzielenie z resztą zmiennej przez zbiór liczb pomiędzy 1 a tą liczbą nie będzie zerem, wówczas liczba jest liczbą pierwszą. Reszta analogicznie

    tablica[i]="TAK";
  if(a%pom1==0)
    tablica[i]="NIE";

  if(b%pom2!=0)
   tablica[i+1]="TAK";
  if(b%pom2==0)
    tablica[i+1]="NIE";

    if(c%pom3!=0)
   tablica[i+2]="TAK";
  if(c%pom3==0)
    tablica[i+2]="NIE";

    if(d%pom4!=0)
   tablica[i+3]="TAK";
  if (d%pom4==0)
    tablica[i+3]="NIE";

}

for(int i=0; i<n; i++)
{
cout<<tablica[i]<odpowiedzi tak, nie
}
return 0;

}

  • created

    Jul '17
  • last reply

    Aug '17
  • 10

    replies

  • 655

    views

  • 5

    users

  • 3

    links

Wskazane jest przekazywanie kodu jako linku do ideone.com3
tam tez można przetestować działanie programu

Zanim napisze się post na forum warto sprawdzić czy nie ma już wątku poświęconego temu zadania, jeżeli jest przeczytać, i dopiero jeżeli nie ma tam odpowiedzi, dopisać swoje pytanie
Nowy wątek zakładamy tylko w przypadku, gdy brak wątku dla zadania

czytając twój program, stwierdzam, że albo przestałem rozumieć C++ i zapomniałem wszystko o liczbach pierwszych, albo też przysłałeś program rozwiązujący zupełnie inne zadanie :slight_smile:

więc może uzupełnij swój program o komentarze dla każde linii, co wg. ciebie ta linia robi, czy też co chciałeś zrobić - obawiam się, że będą to dwie różne rzeczy

  1. Czemu masz cin>>a>>b>>c>>d ?
    Pierwsza liczba to liczba testów -> czyli ile liczb zostanie podanych.
    Nie możesz zakładać, że zawsze 3 liczby zostaną podane, gdyż polecenie mówi, że n<100000.
    Zatem polecam napisać coś w stylu
    cin>>n;
    for(int i=0;i<n;i++) { kod }
    albo while(n--) {kod}
  2. Masz coś takiego jak int pom1,pom2 itd, a następnie sprawdzasz czy pom1>1 i pom1<a itd
    o co wgl kaman?? Nie masz przypisanej wartości pom1 zatem zostanie przypisania jakaś losowa liczba.
    To wgl nie ma sensu.
  3. Po co ci jakiś string i tablica
  4. Czy to jest na pewno to zadanie?

Dziękuję za wyczerpującą odpowiedź i za wskazówki :slight_smile:
Już zabieram się edit z komentarzami :wink:
Pozdrawiam.

1.Z tego co zrozumiałem, mieliśmy mieć dane kilka liczb(w tym przypadku 4) i n-tą ilość prób. Wzorowałem się na przykładzie, w którym dla 4 liczb udzielono 3 odpowiedzi.

2 Starałem się wprowadzić nowe zmienne, które nie będą miały konkretnej wartości, ale które będą tworzyć przedział, będą zbiorem. Jako początkujący nie wiem, czy jest to możliwe, dlatego też i udostępniam ten przykry kod, aby wyłapać takie zagadnienia :wink:

3.Tablicę zainicjowałem jako string, aby przechowywała tekst, a tablica n elementowa miała przechowywać ilość udzielonych odpowiedzi, które z kolei byłyby wyświetlane w kolejnej pętli.

4.Obawiam się, że tak :slight_smile:

Pozdrawiam.

Generalnie, przy pisaniu programu należy kierować się treścią zadania a nie dołączonym zestawem danych :slight_smile: - same dane pozostawiają zbyt dużą możliwośc interpretacj :slight_smile:

Pytania @i6g7g6y5 były razej pytaniami retorycznymi i nikt nie oczekiwał, abyś odpowiadał na nie [pisemnie]. Miałeś się tylko nad nimi zastanowić i sam sobie odpowiedzieć.
Teraz namieszałeś i nie wiem, czy już zrozumiałeś, czy nadal nie rozumiesz o co chodzi w tym zadaniu. [nie odpowiadaj].
Po prostu:

  1. Poczytaj jeszcze raz [lub kilka] treść zadania - jest to prosty, matematyczny język - aż do pełnego zrozumienia.
  2. Do rozwiązania tego zadania wystarczą podstawy programowania i znajomość zagadnienia liczb pierwszych. Warto przy okazji poznać algorytmy ich znajdowania, bo ta wiedza przyda się przy rozwiązywaniu wielu innych zadań.
  3. Zanim znowu zaczniesz pytać, poczytaj inne wątki o tym zadaniu: http://discuss.spoj.com/search?q=liczby%20pierwsze

PS

Raczej skasuj cały kod, zapomnij o nim [spal wszystkie kopie i jego wydruki] i napisz porządnie na nowo.

PS 2
Od sprawdzania poiprawności działania twojego programu zgodnie z założeniami autora zadania jest SPOJ, więc tam wysyłaj swój kod i tam od razu [natychmiast] uzyskasz odpowiedź [czy ok czy nie].

[Odpowiadam]Jak zauważyłem, większość miała problem ze zrozumieniem kodu, więc starałem się nieco nakierować w czym rzecz :stuck_out_tongue:

Hej, tez mam problem z tym zadaniem. wydaje mi się że mój kod robi to co powinnien ale zadanie nie jest zaliczane. Może chodzi o zakres n? Prosze o przyjacielską rade :wink: Link do kodu kod ideone3

Prawdopodobnie chodzi o to, że jest źle. :slight_smile:
Pierwsza liczba - liczba testów: t
Następnie wczytujesz "t" razy liczbę i sprawdzasz czy jest pierwsza.

np.
INPUT :
3
5
7
8
OUTPUT:
TAK
TAK
NIE

A co robi twój program? Jak wczytasz 3 testy to on sprawdza liczby 1,2,3, a nie te co chcemy wczytać.

PS
Czemu masz spację przed każdym słowem "NIE" lub "TAK" ?