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

Wyświetlenie liczb pierwszych w postaci jednego literału tekstowego

Object Storage Arubacloud
+1 głos
296 wizyt
pytanie zadane 15 grudnia 2021 w C i C++ przez MKolaj15 Bywalec (2,270 p.)

Witam, mam za zadanie napisanie programu, który wyświetli wszystkie liczby pierwsze z zakresu od 2 do 20 oddzielone spacjami w dwóch oddzielnych linijkach (wyświetli dwie takie same linijki). Tylko, że wyświetlenie pierwszej linijki ma być efektem wysłania na standardowe wyjście std::cout jednego literału tekstowego. O ile samo wypisanie liczb pierwszych nie jest jakimś wielkim kłopotem, to już wyświetlenie je w taki sposób sprawia mi problem. Ma ktoś pojęcie jak to zrobić? Póki co wpadłem na coś takiego:

#include <iostream>
#include <string>
#include <iomanip>

// zad 1

auto main() -> int
{
    int p = 2, i, x=0, tab[8];
    bool t;
    std::string str;

    while(p <= 20){
        t = true;
        for(i = 2; i < p; i++)
            if(p % i == 0)
            {
                t = false;
                break;
            }

        if(t)
        {

                tab[x]=p;
        }
        x++;
        p++;
    }

        for(int j = 0; j < 8; j++)
        {
                str[j]=tab[j];          
        }


        std::cout<<str<<std::endl;

return 0;
}

Jak można się domyśleć, kod nie działa. Czy byłby ktoś w stanie w tym pomóc? Z góry dzięki!

komentarz 15 grudnia 2021 przez Oscar Nałogowiec (29,320 p.)

Nie wiem na jakim etapie nauki C++ jestes, ale w bibliotece streams są też strumienie umożliwiające zapis danych do pamięci - stringa (stringstream), potem możesz taki string wypisać na cout.

Można też się bawić w stylu C tablica char i sprintf() - co w sumie robi to samo.

Nie wiem jaka jest definicja, ale słowo 'literał' kojarzy mi się ze stałą umieszczoną bezpośrednio programie. Być może masz te liczby pierwsze po prostu umieścić w programie w formie napisu:

"2 3 5 7 11 13 17 19 ..." i to wyświetlić na początku.

komentarz 17 grudnia 2021 przez VBService Ekspert (254,260 p.)

@MKolaj15, Wydaje Mi się,

if(t)
{ 
    tab[x]=p;
}
x++;

że inkrementacja x powinna "zajść" tylko gdy t jest true, czyli bardziej tak

if(t)
{ 
    tab[x]=p;
    x++;
}

        
lub

if(t)
  tab[x++]=p;

 

1 odpowiedź

+2 głosów
odpowiedź 17 grudnia 2021 przez j23 Mędrzec (194,920 p.)
wybrane 19 grudnia 2021 przez MKolaj15
 
Najlepsza

Użyj funkcji std::to_string do konwersji liczb na tekst. Nowe liczby w formie tekstowej doklejasz do str operatorem +=.

komentarz 19 grudnia 2021 przez MKolaj15 Bywalec (2,270 p.)

Cześć, zrobiłem tak jak poleciłeś, lecz teraz przy próbie skompilowania wyskakuje mi error: ‘cout’ in namespace ‘std’ does not name a type

auto main() -> int
{
    int p = 2, i; 
    bool t;
    std::string str;

    while(p <= 20){
        t = true;
        for(i = 2; i < p; i++)
            if(p % i == 0)
            {
                t = false;
                break;
            }

        if(t)
        {
                str += std::to_string(p);
               
        }
        p++;
    }

        std::cout<<str<<std::endl;

return 0;
}

 

komentarz 19 grudnia 2021 przez MKolaj15 Bywalec (2,270 p.)
Sorki, mój błąd z klamrą postawioną nie tam gdzie trzeba, dzięki za pomoc!!!

Podobne pytania

+1 głos
1 odpowiedź 159 wizyt
+1 głos
2 odpowiedzi 11,569 wizyt
0 głosów
2 odpowiedzi 248 wizyt
pytanie zadane 2 czerwca 2020 w C i C++ przez Cincin Nowicjusz (240 p.)

92,615 zapytań

141,465 odpowiedzi

319,779 komentarzy

61,997 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...