Program wyswietlajace liczby parzyste i nie parzyste

0

Witam!

Chce napisać taki program:

Napisać program który: zapyta użytkownika o ilość podawanych liczb całkowitych, następnie zapyta o kolejne liczby.
Po wprowadzeniu wszystkich liczb, program wypisze w konsoli ile z nich było parzystych a ile nieparzystych.
Uwaga: w programie należy użyć pętli while. Nie wolno używać tablic.

Do tej pory udalo mi się zrobić coś takiego:

 #include <iostream>
#include <cstdlib>
#include <math.h>

using namespace std;

int main()
{
	int ilosc, liczba, l;
	
	cout << "Podaj ile liczb chcesz wpisac: ";
	cin >> ilosc;
	cout << endl;
	
	for (int i = 0; i < ilosc; i++)
	{
		cout << "Podaj liczbe nr " << i+1 << ": ";
		cin >> liczba;
		}

	l = 0;	
	while(l != liczba%2 ==0)
	{
	l++;
		for(liczba; liczba <=ilosc; liczba++)
		{
			cout << "Liczby parzyste to: " << liczba;
		}
	
	};
	
	while(liczba%2 ==1)
	{
		cout << "Liczby nie parzyste to: "<< liczba;
	
	
	
	};
	



system("PAUSE");
}

Wczytuje liczby z klawiatury ale nie wiem jak wyświetlić parzyste i nie parzyste z podanych liczb :/

Proszę o pomoc!

0

O teraz zrobiłem coś takiego:

 #include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	int ilosc, liczba;
	
	cout << "Podaj ilość liczb: ";
	cin >> ilosc;
	cout << endl;
	
	for (int i = 0; i < ilosc; i++)
	{
		cout << "Podaj liczbe " << i +1 << ": ";
		cin >> liczba;
	}
	
	int n;
	n = 0;
	while(n <= ilosc)
	{
		if(liczba%2 ==0)
		{
			cout << "Liczby parzyste: " << liczba << endl;
				}			
			else if(liczba%2 == 1)
			{
				cout << "Liczby nie parzyste " << liczba << endl;
				
			}
		
			
	break;	
	};
	
system("PAUSE");
}

Nawet działa tylko wyswietla mi tylko 1 liczbe parzystą a jak podam np ilosc 4 i same 1 to powinno wyswietlic 4 jedynki. Jak to zrobic?

0

Licz ilość parzystych i nieparzystych w pętli wczytującej liczby.

0

Tzn. jak?

0

Tzn przenieś porównania do pętli for i tam przy wczytywaniu kolejnych liczb sprawdzaj czy wczytana jest parzysta czy nie i zapisuj sobie ile było takich i takich do zmiennych. Z treści zadania nie wynika żebyś musiał wypisać 4 jedynki tylko liczbę 4 - że było tyle jedynek. Poza tym tego fora musisz chyba zastąpić while-em żeby mieć while wykorzystany w zadaniu.

0

Aha no właśnie ma wypisać ilość tych liczb a nie kolejne liczby. sorki.

A jak mam wczytac kolejne liczby przy użyciu pętli while?

I jak zapisywać do tych zmiennych po sprawdzeniu warunku?

0

to bedzie cos takiego:

int ilosc;
cin >> ilosc;
int n = ilosc;
int nieparzystych = 0;
while (n--)
  {
    int a;
    cin >> a;
    nieparzystych+=a&1;
  }
cout << "parzystych: " << ilosc-nieparzystych << "\nnieparzystych: " << nieparzystych << "\n";
0

Oki a objaśnij jeśli możesz :D twój tok rozumowania xd

Chodzi mi o linijke:

nieparzystych+=a&1;

1

a&1 to ostatni bit liczby a,
po zapisaniu liczby w postaci binarnej, np. 5, wykonujemy na nim operację AND bitowo z liczbą 1:

101
001
---
001

liczby parzyste posiadają liczbę 0 na końcu, a liczby nieparzyste 1 w zapisie binarnym.

zatem dla liczb 1,2,3,4,5:

1&1 = 1
2&1 = 0
3&1 = 1
4&1 = 0
5&1 = 1
-------
======3

masz 3 liczby nieparzyste

0
Odyn napisał(a)

Oki a objaśnij jeśli możesz :D twój tok rozumowania xd

Chodzi mi o linijke:

nieparzystych+=a&1;

to może ja.
operator "&" to bitowy iloczyn (AND). poczytaj http://pl.wikipedia.org/wiki/Maska_bitowa

wyrażenie:

bool b = a & 1 ;

sprawdza, czy bit na pozycji 0 (bo 1<<0==1, 2^0=1) w zmiennej a jest ustawiony na 1. jakbyś chciał sprawdzić 3 bit, to musiałbyś zrobić:

bool b = a & 8; //bo 1<<3 == 8, 2^3=8)

jak to ma się do parzystości? a sprawdź po kolei liczby naturalne z zerem:

 a |    a_bin | a&1
 0 | 00000000 | 0
 1 | 00000001 | 1
 2 | 00000010 | 0
 3 | 00000011 | 1
 4 | 00000100 | 0
 5 | 00000101 | 1
(...)

rozumiesz? ;)

0

Aaaaaa no rozumiem :) Tylko czy da się uniknąć tych operacji na bitach? I wyświetlić te ilość w inny sposób?

Bo jestem początkującym programistą i dopiero doszliśmy na studiach do funkcji xd

0

No to zrób tak jak na początku zrobiłeś:

 
if (a % 2 == 1)
   nieparzystych++;
0

można też tak:
nieparzystych+=a%2;

0

Ja to robie tak:

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	int ilosc, liczba,n, lp, ln;
	
	cout << "Podaj ilość liczb: ";
	cin >> ilosc;
	cout << endl;
	
	
	lp, ln = 0;
	n=ilosc;
	while(n--)
	{
	
		for(int i=0; i< ilosc; i++)
		{
		cout << "Podaj liczbe " << i +1 << ": ";
		cin >> liczba;
			
			
			if(liczba%2==0)
			{
			lp++;
				//cout << "Ilosc liczb parzystych: " << lp << endl;
				}			
				else if(liczba%2==1)
				{
				ln++;
					//cout << "Ilosc liczb nie parzystych: " << ln << endl;
					}}
					cout << "Ilosc liczb parzystych: " << lp << " Ilosc liczb nie parzystych: " << ln << endl;
					break;
	};
	
system("PAUSE");
} 

Tylko wciąż mi się krzaczy coś :/ bo on powtarza kilka razy wczytywanie liczb :/ Gdzie tu coś pochrzaniłem?

0

wywal to: for(int i=0; i< ilosc; i++)

0

Tutaj zamieszczam efekty na konsoli:

http://imageshack.us/photo/my-images/405/programes.png/

Ilosc nie parzystych sie zgadza ale w parzystych jakies kosmiczne liczby mi wywala;D

0

Heheh jak wywale tego fora to mi tylko 1 liczbe wczyta i konczy xd

0

a po cholere break wrzucasz do pętli w takim razie?

0

Mam wiem co było zle :D bo zle wyzerowalem lp i ln bo napisalem lp,ln =0; a powinno byc lp =0, ln = 0;

Teraz dziala jak powinno :D

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
	int ilosc, liczba,n, lp, ln;
	
	cout << "Podaj ilosc liczb: ";
	cin >> ilosc;
	cout << endl;
	
	lp = 0;
	ln = 0;
	n=ilosc;
	while(n)
	{
	
		for(int i=0; i< ilosc; i++)
		{
		cout << "Podaj liczbe " << i +1 << ": ";
		cin >> liczba;
			
			
			if(liczba%2==0)
			{
			lp++;
				
				}			
				else if(liczba%2==1)
				{
				ln++;
					
					}}
					
					break;
	};
	
	cout << "Ilosc liczb parzystych: " << lp << " Ilosc liczb nie parzystych: " << ln << endl;
	
	
	
	





system("PAUSE");
} 
0

Twój kod by wygrał w konkursie na obfuskacje kodu.

0

heheh taki nie czytelny jest? ;D

wciąż się uczę xd musicie mi wybaczyć nie czytelność kodu xd

bardzo dziękuję za pomoc wszystkim:)

0

Mały offtop. "Nie" z przymiotnikami piszemy razem: nieparzyste, nieczytelny.

0

Chodzi o to, że w kodzie robisz pętle która nic nie robi poza tym, że jest.

0
#include <iostream>
using namespace std;

int main()
{
    int ilosc_liczb;
    cout <<"Ile liczb? \n";
    cin >> ilosc_liczb;
    
    int liczba;
    int parzyste= 0, nieparzyste= 0;
    
    for(int i= 1; i <= ilosc_liczb; i++)
    {
            cin >> liczba;
            if(liczba % 2 == 0) parzyste++;
            else nieparzyste++;
    }
    
    cout <<"Podano " << parzyste << " liczb parzystych i " << nieparzyste << " nieparzystych\n";
    
    
    system ("PAUSE");
    return 0;
}

Możesz sobie porównać :)

0

ale on już dostał gotowy kod, razem z jego wcześniejszym wymogiem, że wczytywanie ma być w pętli while, a nie for i dalej kombinuje :P

0

Dobre chłopaki xd nie istotne juz. Wystarczy ,że działa. Na tym etapie nikt nie ocenia kodu po względem czytelności:)

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