Pomoc w dwóch małych programach.

0

Dzień dobry,

Jest ktoś może w stanie pomóc mi z zadaniami w załączniku? Będę bardzo zobowiązany :)

Pozdrawiam

5

Chętnie pomożemy, w czym masz problem?

0

Szczerze mówiąc ze wszystkim, programowanie to nie mój konik a muszę to zrobić na studia.

Wiem, że w pierwszym zadaniu trzeba użyć isalpha tylko nie wiem jak zrobić aby program nie rozróżniał wielkości liter (bo całość ma rozróżniać po kodach ASCI?) a potem iterować gdy dany kod ASCI się powtarza.

Drugiego niestety nie wiem jak zacząć w ogóle.

4

Ok, to rób po kolei. W pierwszym zadaniu, dla każdego wczytanego znaku chcesz zrobić dwie rzeczy:

  • sprawdzić czy jest literą (jeśli nie - ignorujesz ten znak) - tutaj użyj isalpha()
  • jeśli jest literą, dodać wartość do licznika tej litery. Aby to zrobić możesz konwertować wszystkie litery na małe albo wielkie za pomocą funkcji toupper() albo tolower()

Na tej podstawie powinieneś być w stanie napisać już całe zadanie, a przynajmniej solidny kawałek kodu - w razie problemów śmiało pytaj.

Kod wrzucaj w tagi ```cpp, np:
```cpp
tutaj_kod();
```

0

A jak zrobić cin, który czyta dopóki nie wciśniemy ctrl+c?

3
char c;
while(std::cin >> c) {
    // ...
}

albo

for(char c; std::cin >> c;) {
}
0

Nie wiem niestety dalej, jak mam zapisać w tablicy wpisywane litery?

1

Na początek utwórz sobie tablicę z 256 elementami, później będziemy to optymalizować:

int counts[256] = {};
0

akurat to wiedziałem ale jak po napisaniu czegoś nie wcisnę klawisza ENTER i od razu zakończę wpisywanie to nic w tablicy się nie zapisywało więc nie wiedziałem o co chodzi.

#include <iostream>
#include <cctype>

int main()
{
    char table[256];

    int i = 0;
    for(char c; std::cin >> c;)
    {
       table[0] = tolower(c);
       i++;
    }

    std::cout << i;

}

3
table[0] = tolower(c);

zapisujesz ciagle do tego samego miejsca. (tam masz zero a powinien byc iterator petli)

1
fasadin napisał(a):
> table[0] = tolower(c);
> ```
> zapisujesz ciagle do tego samego miejsca. (tam masz zero a powinien byc iterator petli)

Ponadto, chcesz zwiększać policzoną liczbę wystąpień, a nie przypisywać kod znaku. Co chcesz zrobić: zwiększyć wartość n-tej komórki tablicy o jeden, gdzie n jest kodem znaku.
2

char table['z'-'a'+1]={0}; - tylko tyle potrzebujesz
if(isalpha(c)) - jeżeli to znak
++table[tolower(c)-'a']; - zwiększamy odpowiedni licznik

0

mam takie coś pomoże ktoś dalej?

#include <iostream>
#include <cctype>

int main()
{
    char table[256];

    int i = 0;
    for(char c; std::cin >> c;)
    {
       table[i] = tolower(c);
       i++;
    }

    //std::cout << i;

    for(int j=0; j<=i-1; j++)
    {
        if(isalpha(table[j]))
        {

        }
    }
}


1

Nie o to chodzi. Może najpierw opisz słowami co chcesz zrobić.

0
Lebxs napisał(a):

Szczerze mówiąc ze wszystkim, programowanie to nie mój konik a muszę to zrobić na studia.

Wiem, że w pierwszym zadaniu trzeba użyć isalpha tylko nie wiem jak zrobić aby program nie rozróżniał wielkości liter (bo całość ma rozróżniać po kodach ASCI?) a potem iterować gdy dany kod ASCI się powtarza.

Drugiego niestety nie wiem jak zacząć w ogóle.

Dali wam na zaczęcie programowania c++?

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