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

Odpowiedz Nowy wątek
2016-05-09 19:36
0

http://forum.pasja-informatyk[...]yswietlaniem-kolejno-po-sobie

Hej, mam pewnie dosyc prosty problem, szukam pomocy.

Pozostało 580 znaków

2016-05-09 19:39
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."

Pozostało 580 znaków

2016-05-09 21:24
0

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

Pozostało 580 znaków

2016-05-09 22:27
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;
            }
        }
    } 

edytowany 1x, ostatnio: carlosmay, 2016-05-09 22:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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