Losowa tablica złożona z 15 liczb

0

Dzień dobry,
Mam do wykonania takie zadanie z programowania:

a) wygeneruje losową tablicę złożoną z 15 liczb naturalnych,
b) wyświetli kolejne elementy tablicy, oddzielone przecinkami,
c) wstawi 0 na nieparzystych miejscach w tablicy, czyli miejsca numer 1, 3, 5, 7, 9, 11, 13.
d) wyświetli "nową" tablicę.
*Na 6 dodatkowo. Zmodyfikuj program, tak aby liczba elementów tablicy była podawana przez użytkownika.

Niby coś zrobiłem, lecz nie jestem pewien czy to jest dobrze i jak to poprawić, aby nadawało się na tą 6

#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

int main()
{
    const int n = 15;
    srand(time(NULL));
        int tab[n];
        for(int i=0;i<n;i++)
        {
            tab[i] = rand()%15;
                if(tab[i]%2)
                        cout<<tab[i]<<", ";
        }
        cout<<endl;

        system("pause");

        return 0;
}

Bardzo prosiłbym o pomoc.

0

rand()%15; Czemu mod 15? Pomijając już https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/
Na chwilę obecną nie myśl o 6, tylko o podstawowym zadaniu. Musisz odróżniać indeks elementu w tablicy od wartości elementu. Na razie nie wyświetlasz 15-elementowej tablicy, zacznij od tego.

1

Jeśli możesz to w zadaniu na 6 skorzystaj z vectora ,jeśli nie to skorzystaj z wskaźnika i operatora new (chociaż jest to niezalecane).
Poza tym kompletnie nie realizujesz punktu 2 oraz punktu 3.
Wersja z wektorem

    int n;
    cin >> n;
    vector<int> tab(n);

Tablica (niezalecana)

    int n;
    int* tab;
    cin >> n;
    tab = new int[n];
    //kod
    delete[] tab;
0
#include<iostream>
#include<cstdlib>

using namespace std;

int main()
{
        int tab[15];
        for(int i=0; i<15; i++)
        {
        tab[i]=rand()%100+1;
        if(tab[i]%2);
        cout<<tab[i]<<", ";
        }

        system("pause");

        return 0;
}

Coś takiego nadaje się do podstawowego zadania? Czy coś tu zmienic?

0

a) wygeneruje losową tablicę złożoną z 15 liczb naturalnych,
b) wyświetli kolejne elementy tablicy, oddzielone przecinkami,

Z tego opisu: ile liczb zostanie wyświetlonych?

0

Jeśli jest parzysta nie wyświetla mi tej liczby, a jak jest nieparzysta wyświetla mi ją

0

Mam wrażenie ,że kompletnie nie rozumiesz zadania

b) wyświetli kolejne elementy tablicy, oddzielone przecinkami,
c) wstawi 0 na nieparzystych miejscach w tablicy, czyli miejsca numer 1, 3, 5, 7, 9, 11, 13.

Pokaż mi gdzie to jest wykonywane w twoim kodzie. Gdzie jest cała tablica wyświetlana i gdzie wstawiasz zera do tej tablicy.

0
Konrad Zarzecki napisał(a):

Jeśli jest parzysta nie wyświetla mi tej liczby, a jak jest nieparzysta wyświetla mi ją

Nic takiego nie robi. Możesz tę linijkę z ifem usunąć i nie będzie zmiany w działaniu programu.

0
Konrad Zarzecki napisał(a):
kq napisał(a):
Konrad Zarzecki napisał(a):

Jeśli jest parzysta nie wyświetla mi tej liczby, a jak jest nieparzysta wyświetla mi ją

Nic takiego nie robi. Możesz tę linijkę z ifem usunąć i nie będzie zmiany w działaniu programu.

W sumie racja, już sam się pogubiłem co mam zrobić i jak to zrobić.

0

Wykonaj punkty a i b.

0
kq napisał(a):

Wykonaj punkty a i b.
To chyba to

 int tab[15];
        for(int i=0; i<15; i++)
        {
        tab[i]=rand()%100+1;
        }
3

Podziel sobie to zadanie na logiczne części, tak jak masz w zadaniu. Można to ładnie zrealizować za pomocą funkcji, których nazwy będą znaczyły dokładnie to co aktualnie robią.

#include<iostream>
#include<cstdlib>

using namespace std;

void wyswietl_elementy_tablice( int tab[] , int rozmiar )
{
    for( int i=0 ; i<rozmiar ; ++i)
    {
         if( i>0 && i<rozmiar ) cout << ",";
         cout << tab[i];
    }
    cout << endl;
}

void losuj_elementy_tablicy( int tab[] , int rozmiar )
{
    for( int i=0 ; i<rozmiar ; ++i )
    {
        tab[i] = rand()%100+1;
    }
}

void zeruj_nieparzyste_elementy( int tab[] , int rozmiar )
{
    for( int i=1 ; i<rozmiar ; i+=2 )
    {
        tab[i] = 0;
    }
}

int main()
{
    const int rozmiar = 15;
    int tab[rozmiar];

    losuj_elementy_tablicy(tab,rozmiar);

    wyswietl_elementy_tablicy(tab,rozmiar);

    zeruj_nieparzyste_elementy(tab,rozmiar);

    wyswietl_elementy_tablicy(tab,rozmiar);

    return 0;
}
0

Napisze ci taki plan punkt po punkcie

  1. Wylosuj sobie tablicę z 15 elementów I wyświetl ją, taką już masz bez tego ifa.
  2. W pętli for (int i = 1; i < 15; i+=2) podmień liczby tab[i]=0 wewnątrz tej pętli.
  3. Wypisz nową tablicę
0
Konrad Zarzecki napisał(a):
kq napisał(a):

Wykonaj punkty a i b.
To chyba to

 int tab[15];
        for(int i=0; i<15; i++)
        {
        tab[i]=rand()%100+1;
        }

​>

​-

b) wyświetli kolejne elementy tablicy, oddzielone przecinkami,

0
kq napisał(a):
Konrad Zarzecki napisał(a):
kq napisał(a):

Wykonaj punkty a i b.
To chyba to

 int tab[15];
        for(int i=0; i<15; i++)
        {
        tab[i]=rand()%100+1;
        }

​>

​Wtf

b) wyświetli kolejne elementy tablicy, oddzielone przecinkami,

Ups, nie zaznaczyłem tego

cout<<tab[i]<<", ";
0

No dobrze, to teraz punkt c.

Podział na funkcje jak polecił @TomaszLiMoon wydaje się fajnym pomysłem.

1
Konrad Zarzecki napisał(a):

Jeśli jest parzysta nie wyświetla mi tej liczby, a jak jest nieparzysta wyświetla mi ją

w treści jest mowa o parzystych miejscach (indeksach) tablicy a nie o parzystych wartościach

0
Konrad Zarzecki napisał(a):
kq napisał(a):
Konrad Zarzecki napisał(a):
kq napisał(a):

Wykonaj punkty a i b.
To chyba to

 int tab[15];
        for(int i=0; i<15; i++)
        {
        tab[i]=rand()%100+1;
        }

​>

​Wtf

b) wyświetli kolejne elementy tablicy, oddzielone przecinkami,

Ups, nie zaznaczyłem tego

cout<<tab[i]<<", ";

Ja bym w pętli leciał tylko do 14 elementu tablicy tak by po ostatnim elemencie nie było przecinka. Wtedy za pętlą wyświetl cout<<tab[i] . Podział na funkcje zawsze jest dobrym pomysłem.

0
jvoytech napisał(a):
Konrad Zarzecki napisał(a):

Jeśli jest parzysta nie wyświetla mi tej liczby, a jak jest nieparzysta wyświetla mi ją

w treści jest mowa o parzystych miejscach (indeksach) tablicy a nie o parzystych wartościach

No właśnie ogarnąłem, że raczej mam wyświetlać parzyste wartości jako normalne liczby, a nieparzyste jako 0. Tylko teraz mam problem bo nie za bardzo wiem jak to zrobić

0
Konrad Zarzecki napisał(a):
jvoytech napisał(a):
Konrad Zarzecki napisał(a):

Jeśli jest parzysta nie wyświetla mi tej liczby, a jak jest nieparzysta wyświetla mi ją

w treści jest mowa o parzystych miejscach (indeksach) tablicy a nie o parzystych wartościach

No właśnie ogarnąłem, że raczej mam wyświetlać parzyste wartości jako normalne liczby, a nieparzyste jako 0. Tylko teraz mam problem bo nie za bardzo wiem jak to zrobić

  1. masz stworzyć tablicę.
  2. w pętli losuj wartość i wstawiaj do tablicy
  3. wyświetl całą tablicę (pętla)
  4. w pętli wpisz zera do miejsc (modyfikacja tablicy), których indeks jest nieparzysty
  5. wyświetl tablicę (pętla)
0
Botek napisał(a):

Napisze ci taki plan punkt po punkcie

  1. Wylosuj sobie tablicę z 15 elementów I wyświetl ją, taką już masz bez tego ifa.
  2. W pętli for (int i = 1; i < 15; i+=2) podmień liczby tab[i]=0 wewnątrz tej pętli.
  3. Wypisz nową tablicę
int tab[15];
        for(int i=0; i<15; i++)
        {
        tab[i]=rand()%100+1;
        cout<<tab[i]<<", ";
        }
        for(int i=0; i<15; i+=2)
        {
        tab[i]=0;
        cout<<tab[i]<<", ";
        }

Czyli ma wyglądać to tak czy źle zrobiłem?

0

Szczerze dziękuję wszystkim za pomoc! Jesteście najlepsi!

0
TomaszLiMoon napisał(a):

Podziel sobie to zadanie na logiczne części, tak jak masz w zadaniu. Można to ładnie zrealizować za pomocą funkcji, których nazwy będą znaczyły dokładnie to co aktualnie robią.

#include<iostream>
#include<cstdlib>

using namespace std;

void wyswietl_elementy_tablice( int tab[] , int rozmiar )
{
    for( int i=0 ; i<rozmiar ; ++i)
    {
         if( i>0 && i<rozmiar ) cout << ",";
         cout << tab[i];
    }
    cout << endl;
}

void losuj_elementy_tablicy( int tab[] , int rozmiar )
{
    for( int i=0 ; i<rozmiar ; ++i )
    {
        tab[i] = rand()%100+1;
    }
}

void zeruj_nieparzyste_elementy( int tab[] , int rozmiar )
{
    for( int i=1 ; i<rozmiar ; i+=2 )
    {
        tab[i] = 0;
    }
}

int main()
{
    const int rozmiar = 15;
    int tab[rozmiar];

    losuj_elementy_tablicy(tab,rozmiar);

    wyswietl_elementy_tablicy(tab,rozmiar);

    zeruj_nieparzyste_elementy(tab,rozmiar);

    wyswietl_elementy_tablicy(tab,rozmiar);

    return 0;
}

Cały czas pojawia mi się ta sama tablica w tym kodzie, w sensie te same liczby. Da się na to jakoś zaradzić?

0
srand( time( NULL ) );

Na początku programu. W funkcji main

0
Botek napisał(a):
srand( time( NULL ) );

Na początku programu. W funkcji main

Tak raczej to nie powinno byc
screenshot-20200526205145.png

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