c++ problem-z-wyswietlaniem-kolejno-po-sobie

0

http://forum.pasja-informatyki.pl/139072/c-problem-z-wyswietlaniem-kolejno-po-sobie

Hej, mam pewnie dosyc prosty problem, szukam pomocy.

0

Witam,

Ucze sie podstaw C++, mam problem z nizej opisanym zadaniem, mimo udzielonej na koncu podpowiedzi. Robie cos zle, najpewniej robiac jakis podstawowy blad, Czy moge liczyc na poprawiony kod w odpowiedzi, lub jeszcze bardziej precyzyjna rade. Dzieki !

**
Tresc zadania:**

Wczytywać znaki (zmienne typu char) pojedynczo (znak po znaku) aż pierwszy lub drugi wczytany znak powtórzą się dwa razy. Wydrukować informację:

a) których znaków wczytano więcej: małych liter czy cyfr (lub informację, że było ich tyle samo)

b) ile razy dwa średniki stały obok siebie (tzn. wczytano kolejno po sobie dwa średniki).

 #include <iostream>
#include <cstdlib>
using namespace std;
**

moja proba:**
 
int main()
{
// Deklaracja zmiennych
char akt_znak;
char poprz_znak;
int licznik;
char check1;
char check2;
int warunek1;
int warunek2;
 
int cyfry;
int malelitery;
//int reszta;
 
 
cout << "Pierwsze dwa wczytane znaki zostana zapamietane. Nastepnie dwukrotnie powtorzenie ktoregos z nich powoduje zakonczenie programu i wyswietlenie podsumowania.\r\nTeraz podawaj dowolne znaki: \r\n";
 
//wartosci poczatkowe
warunek1 = 0;
warunek2 = 0;
cyfry = 0;
malelitery = 0;
//reszta = 0;
 
//wczytanie znakow do zapamietania
cin >> check1;
cin >> check2;
 
if (check1 != ';'&& check2 !=';') {licznik = 0;}
else if (check1 == ';'&& check2 !=';') {licznik = 0;}
else if (check1 == ';'&& check2 ==';') {licznik = 2;}
else if (check1 != ';'&& check2 ==';') {licznik = 1;}
 
 
while (warunek1 < 2 && warunek2 < 2)
{
 
    poprz_znak = akt_znak;
    cin >> akt_znak;
    if (akt_znak >= '0' && akt_znak <= '9'){cyfry++;}
    else if (akt_znak >= 'a' && akt_znak <= 'z'){malelitery++;}
    else if (poprz_znak == ';' && akt_znak == ';'){licznik++; }
    //else {reszta++;}
 
    //licznik powtorzen
    if(akt_znak == check1){warunek1++;}
    else if (akt_znak == check2){warunek2++;}
};
 
//podsumowanie
cout<<"Wczytano kolejno po sobie \t"<<licznik<<"\t srednikow.";
if(malelitery>cyfry){cout << "\tWiecej razy wpisano Male Litery" << endl;}
else if(malelitery<cyfry){cout << "\t Wiecej razy wpisano Cyfry" << endl;}
else{cout << "\t Tyle samo Malych Liter i Cyfr" << endl;}
 
system("PAUSE");
return 0;
}

Podpowiedz mi udzielona:

"ogolnie jest dobrze, pojawiają się problemy, jeśli jako jeden z pierwszych znaków wpisany jest średnik (np a ; a a - wyświetla jedno wystąpienie średników po sobie).

przemysl warunki (tylko jeden jest potrzebny):

if (check1 != ';'&& check2 !=';') {licznik = 0;}
else if (check1 == ';'&& check2 !=';') {licznik = 0;}
else if (check1 == ';'&& check2 ==';') {licznik = 2;}
else if (check1 != ';'&& check2 ==';') {licznik = 1;}

oraz ustawienie wartości zmiennej akt_znak przed pętlą while."

0

Robisz to niesamowicie źle, ale zaczynając od początku:
Pokaż przykładowe wejście i odpowiadające mu oczekiwane wyjście.

0

Z klawiatury wprowadzamy cały wiersz i analizujemy znak po znaku.

{
		char ch;
		bool flag = false;
		int digits = 0;
		int alphas = 0;
		int double_semicolons = 0;
		while (cin.get(ch) && ch != '\n') // analizę kończy znak nowego wiersza (enter)
		{
			if (ch >= 'a' && ch <= 'z')
			{
				++alphas;
				flag = false;
			}
			else if (ch >= '0' && ch <= '9')
			{
				++digits;
				flag = false;
			}
			else if (ch == ';')
			{
				if (flag == false)
					flag = true;
				else
				{
					++double_semicolons;
					flag = false;
				}
			}
			else
			{
				flag = false;
			}
		}
	} 

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