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

Tablica dynamiczna w funkcji bool

VPS Starter Arubacloud
+1 głos
1,036 wizyt
pytanie zadane 27 lipca 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
#include <iostream>


using namespace std; 

bool Pierwsza(int )
{
 int p=1;

 if ( == 1)
  return false; // nie jest pierwsza

 for (int i=1; i<=; i++)
 {
  if (%i == 0)
   {
    p++;
    if (p>2)
     return false; // nie jest pierwsza
   }
 }
 return true;  // jest pierwsza
}

int main()
{
    int liczbaTestow;
    int liczba;

    do{
        cin >> liczbaTestow;

    }while(liczbaTestow >= 100000);

     int *tablica = new int[liczbaTestow];


    for(int i = 1; i <= liczbaTestow; i++)
    {

        do{
            cin >> liczba;

        }while(liczba < 1 || liczba > 10000);

        tablica[i] = liczba;

    }


    for(int j = 1; j <= liczbaTestow; j++)
    {

       // cout << Pierwsza(tablica[j]) << endl;
       if(Pierwsza(tablica[j] == 1))
        cout << "TAK" << endl;
       else
        cout << "NIE" << endl;


    }





    delete [] tablica;
    return 0;
}

Mam taki kod i pytanie jak sprawić żeby wartości z tablicy były sprawdzane przez funkcje. Domyślam sie ze wskaźnikiem ale nie mogę tego jakoś podłączyć dobrze mógłby ktoś coś pokazać

komentarz 27 lipca 2016 przez niezalogowany

 pytanie jak sprawić żeby wartości z tablicy były sprawdzane przez funkcje

Nie rozumiem co chcesz zrobić, btw ten twój kod to jakiś testowy tak? Bo on nie ma nawet prawa działać

komentarz 27 lipca 2016 przez Kasztan Dyskutant (8,080 p.)
Taki gotowiec do uzupełnienia funkcja main() jest git zostało zając sie funkcją Pierwsza ()
komentarz 27 lipca 2016 przez Kasztan Dyskutant (8,080 p.)
tablica przechowuje inty kazdy z intów ma przejść przez funkcje pierwsza i określić true lub false

6 odpowiedzi

+1 głos
odpowiedź 28 lipca 2016 przez Ehlert Ekspert (212,630 p.)
Jeśli sprawdzasz "pierwszość" liczby np 35465634 to bez sensu jest wykonywać działanie 35465634 / (35465634-1) w celu znalezienia dzielnika. Szukaj ich w przedziale <1 ; sqrt(liczba_sprawdzana)>
0 głosów
odpowiedź 27 lipca 2016 przez niezalogowany
Pętla i jedziesz po indeksach
0 głosów
odpowiedź 27 lipca 2016 przez Kasztan Dyskutant (8,080 p.)
Ale argumentem funkcji pierwsza ma być wskaźnik na tablice ? Mam stworzyć pętle w funkcji Pierwsza ? Jeśli tak to iterator ma się wykonywać do zmiennej Liczba testów pobranej w funkcji Pierwsza jako wskaźnik ? Kurcze nie wiem jak to zaimplementować. Pomoże ktoś ?
0 głosów
odpowiedź 27 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)

Tablica statyczna to tak na prawdę adresy ułożone obok siebie, jednak to o czym będę pisał dotyczy również tablic dynamicznych. Przypominam również, że nazwa tablicy jest jednocześnie adresem jej pierwszego elementu. Tak więc, jeżeli do nazwy tablicy "dodamy" jeden to otrzymamy adres drugiego jej elementu. Wykorzystując tą zależność oraz znając wielkość tablicy możemy bez problemu przesłać ją jako argument funkcji po przez wskaźnik na jej pierwszy element (nazwa tablicy). Ponad to można sobie pewne zapisy uprościć:
int Tab[4]; //Tworzymy prostą cztero-elementową tablicę intów
*Tab=1; //Ustawiamy wartość pierwszego elementu na jeden
*(Tab+1)=3; //Ustawiamy wartość drugiego elementu na trzy (jak widać jest to trochę niewygodne).. uprośćmy to x)
Tab[2]=5; //Ustawiamy wartość trzeciego elementu tablicy na pięć..
tak na prawdę zapis ten jest równy zapisowi
*(Tab+2)=5; Jednak ten sposób jest zdecydowanie wygodniejszy.
A oto prosty przykład:

#include <iostream>

bool IsEven(int a) //Sprawdza, czy liczba jest parzysta
{
    return (a%2==0);
}

int CheckTable(int *Tab, int TabSize) //Zwraca ilość parzystych liczb w tablicy
{
    int Num=0;
    for(int i=0; i<TabSize; i++)
    {
        if(IsEven(Tab[i])) Num++;
    }
   return Num;
}

int main()
{
    int Tab[10]={1,2,3,4,5,6,7,9,11,23};
    std::cout<<CheckTable(Tab, 10);
}

 

0 głosów
odpowiedź 27 lipca 2016 przez Macek Kolo Mądrala (5,480 p.)
Nie jestem ekspertem, ale z tego co się orientuję w C++ nie używa się tablic dynamicznych, tylko np. vektora. I wszystko się upraszcza, bo std::vector udostępnia dość duży interfejs
komentarz 28 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)

std::vector zawiera w sobie tablicę dynamiczną.. więc jeżeli mówisz, że nie powinno się używać tablic dynamicznych to dlaczego polecasz używanie? Mój mózg.. : /
Poza tym działanie bezpośrednio na tablicach jest szybsze niż po przez wbudowane funkcje w strukturze. 
http://www.cplusplus.com/reference/vector/vector/
"Internally, vectors use a dynamically allocated array to store their elements."
 

komentarz 28 lipca 2016 przez maly Nałogowiec (37,190 p.)

std::vector zawiera w sobie tablicę dynamiczną.. więc jeżeli mówisz, że nie powinno się używać tablic dynamicznych to dlaczego polecasz używanie?

Chodzi oto żeby programista nie używał "ręcznych" alokacji i dealokacji(new/delete,malloc/free).

Poza tym działanie bezpośrednio na tablicach jest szybsze niż po przez wbudowane funkcje w strukturze.

Jak może być szybsze skoro vector to opakowanie dla zwykłej dynamicznie alokowanej tablicy?

 

Zanim zaczniesz cokolwiek pisać o czym nie masz pojęcia to zapoznaj się z tymi linkami a potem spróbuj zaprzeczyć konkretnymi argumentami.

http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

http://www.stroustrup.com/C++11FAQ.html

http://www.stroustrup.com/bs_faq2.html

http://www.stroustrup.com/bs_faq.html

komentarz 28 lipca 2016 przez Kasztan Dyskutant (8,080 p.)
Tak i tak jest dobrze nie ma co się spinać
0 głosów
odpowiedź 28 lipca 2016 przez Kasztan Dyskutant (8,080 p.)

Dobra zrobiłem to pozdrawiam : )

#include <iostream>


using namespace std;

bool Pierwsza(int n )
{
 int p=1;

 if (n == 1)
  return false; // nie jest pierwsza

 for (int i=1; i<n; i++)
 {
  if (n%i == 0)
   {
    p++;
    if (p>2)
     return false; // nie jest pierwsza
   }
 }
 return true;  // jest pierwsza
}

int main()
{
    int liczbaTestow;
    int liczba;

    do{
        cin >> liczbaTestow;

    }while(liczbaTestow >= 100000);

     int *tablica = new int[liczbaTestow];


    for(int i = 0; i < liczbaTestow; i++)
    {

        do{
            cin >> liczba;

        }while(liczba < 1 || liczba > 10000);

        tablica[i] = liczba;

    }


    for(int j = 0; j < liczbaTestow; j++)
    {

     //   cout << tablica[j] << endl;
       if(Pierwsza(tablica[j]))
        cout << "TAK" << endl;
       else
        cout << "NIE" << endl;


    }





    delete [] tablica;
    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 767 wizyt
pytanie zadane 1 grudnia 2018 w C i C++ przez four Użytkownik (720 p.)
0 głosów
2 odpowiedzi 500 wizyt
pytanie zadane 4 października 2018 w C i C++ przez uther1455 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 266 wizyt

92,453 zapytań

141,262 odpowiedzi

319,086 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!

...