Liczby losowe i parzyste

0

Witam. Mam problem z takim zadaniem:
Napisz program, który wypełni 10 elementową tablicę liczbami losowymi z przedziału <1,100>, a następnie wypisze wszystkie liczby parzyste znajdujące się w tablicy.
A więc, program który napisałem wygląda tak:

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int i,liczba;
    int tablica[10];
    srand(time(0));
    liczba = 1+rand()%100;
    for(i=1;i<=10;i++)
    {
        cout<<liczba<<endl;
        liczba = 1+rand()%99;
        if(liczba%2==0)
    {
        cout <<"Liczby parzyste: "<<liczba<<endl;
    }
}
    return 0;
}

Niestety, po odpaleniu programu pokazuje on liczby parzyste nad nimi i czasami generuje losową liczbę parzystą. Jak mogę zrobić tak, żeby wymieniał liczby parzyste znajdujące się w tej tablicy na samym dole?

1

A gdzie wypełniasz tę tablicę liczbami?

0
  1. W ogóle nie używasz tablicy (a sam program jej nie wymaga, słabo sformułowane zadanie)
  2. Wypisujesz w pętli każdą wczytaną liczbę. Przestań to robić, to przestaniesz to robić.
1

Cały kod można zredukować do dwóch wywołań funkcji z biblioteki STL lub używając range-v3.

STL

#include <algorithm>
#include <iostream>
#include <iterator>
#include <random>

int main() {
  std::default_random_engine generator;
  std::uniform_int_distribution<int> distribution(1, 100);

  int tab[10];
  
  std::generate(std::begin(tab), std::end(tab),
                [&]() { return distribution(generator); });
  
  std::copy_if(std::begin(tab), std::end(tab),
               std::ostream_iterator<int>(std::cout, " "),
               [](int n) { return n % 2 == 0; });
}

Range-v3

#include <iostream>
#include <random>
#include <vector>

#include "range/v3/all.hpp"

using namespace ranges;

int main() {
  std::default_random_engine generator;
  std::uniform_int_distribution<int> distribution(1, 100);
  
  std::cout << view::all(
      view::generate_n([&]() { return distribution(generator); }, 10) |
      view::filter([](int a) { return a % 2 == 0; }));
}

https://godbolt.org/z/x4jT9r

0

W samym programie rzeczywiscie nie musisz miec tablicy, ale skoro wymagaja w tresci, to nieco zmodyfikowalem twoj program. braklo ci niewiele, zeby dzialal. napisales, ze jestes poczatkujacy, dlatego go zmodyfikowalem, zeby pokazac, w czym dokladniej byl problem.
Zeby tablica w ogole sie do czegos przydala, rozbilem twoja petle for na dwie osobne. w pierwszej przypisujesz liczby do tablicy, w drugiej juz tylko sprawdzasz po kazdym elemencie, czy jest liczba parzysta.

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int liczba = 0;
    int tablica[10];
    srand(time(0));
    for(int i = 0; i < 10; i++)
    {
        liczba = rand() % 100 + 1;
        // tutaj wypelniasz tablice liczbami
        tablica[i] = liczba;
    }
    
    for (int j = 0; j < 10; j++)
    {
        // w taki sposob masz dostep do elementow tablicy
        if (tablica[j] % 2 == 0)
        {
            cout << "Liczby parzyste: " << tablica[j] << "\n";
        }
    }
    return 0;
}

Zwroc uwage na zmiane w petli - zmienilem liczbe, od ktorej zaczynasz iteracje (u ciebie bylo od 1), bo elementy tablicy zaczynaja sie liczyc od 0, więc powinno byc od 0 do 9.

3

Odnośnie pierwotnego kodu to, przeanalizuj sobie krok po kroku jak to działa i zobaczysz wiele błędów w samym przebiegu programu.
Najpierw przed pętla przypisujesz jakaś wartość zmiennej liczba. Potem w pętli ja wypisujesz, dalej zmieniasz jej wartość i sprawdzasz czy nowa wartość jest parzysta. Tutaj generowanie losowe powinno się odbywać tylko w pętli.

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