Liczby parzyste i nie parzyste

0

Witam

Mam do napisania taki program : Wyświetl w dwóch wierszach odpowiednio: liczby parzyste i nieparzyste (pobrane ze zbiorów)

Napisałem coś takiego :

#include<iostream>
#include<conio.h>

using namespace std;

const int rozmiar=10;

int main(){

int tab[rozmiar]={2,4,5,6,7,10,12,14,27,30};

int parzyste;

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

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


if(tab[i]%2==0)

	cout<<"Liczby parzyste w tym zbiorze to : " <<tab[i]; //  chcę aby w tym wierszu pokazał mi te liczby 

ale on łączy jest z obecnymi wartosciami i wypisuje na konsoli : 22,44,5,66,7,1010,1212,1414,27,3030

Jak zrobić aby wypisywał je w oddzielnym wierszu?

}

0

Napisz komentarz do każdej linijki w pętli for. Później zastanów się co się będzie działo przy każdym jej przebiegu.

0

Rozwiązanie najprostsze: zrób dwie pętle. Jedna będzie wypisywać parzyste, druga nieparzyste.

0

może być coś mniej więcej takiego na pewno szło zrobić prościej ale pisane na szybko

 
for(int i = 0; i < 2; i++) {
for(int j = 0; j < rozmiar; j++) {
	if(!i) {
		if(!(tab[j] % 2)) {
			std::cout << tab[j];
		}
	} else {
		if(tab[j] % 2) {
			std::cout << tab[j];
		}
	}
}
std::cout << "\n";
}
0

@robcio, to samo po uproszczeniu:

for(int i=0;i<2;++i,std::cout<<std::endl) for(int j=0;j<rozmiar;++j) if(i^(tab[j]&1)) std::cout<<tab[j]<<' ';
2

I znowu rozwiązanie otagowane jako C++ korzysta jedynie ze strumieni zamiast printf()… A przecież partition() z STL robi dokładnie to czego potrzeba.

#include <iostream>
#include <algorithm>

const int rozmiar = 10;

bool isEven(int n) { return n % 2 == 0; }

int main()
{
    int tab[rozmiar] = {2,4,5,6,7,10,12,14,27,30};
    int* part = std::partition(tab, tab + rozmiar, &isEven);
    std::cout << "Parzyste: ";
    for (int* i = tab; i != part; ++i)
        std::cout << *i << ' ';
    std::cout << "\nNieparzyste: ";
    for (int* i = part; i != tab + rozmiar; ++i)
        std::cout << *i << ' ';
    std::cout << "\n";
}

Edit W komentarzach widzę krzyki, że wciąż za mało C++way, więc proszę:

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::vector<int> odd;
    std::for_each(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), 
        [&](int n) { if (n % 2 == 0) std::cout << n << ' '; else odd.push_back(n); });
    std::cout << "\n";
    std::copy(odd.cbegin(), odd.cend(), std::ostream_iterator<int>(std::cout, " "));
}

Tak lepiej, panowie? :D

0

możecie to napisać prościej bez wskaźników :)

0

NIE śmierdzący leniu! frytki do tego?

0

i colę masz rację ;)

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