[C++][Algorytmy] Podmienianie liter trójkami

Awatar użytkownika
k221
Użytkownik
Użytkownik
Posty: 83
Rejestracja: 23 sie 2015, o 15:01
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 22 razy

[C++][Algorytmy] Podmienianie liter trójkami

Post autor: k221 »

Napisałem program (jest to część większego, na razie bardzo podstawowa wersja, która aktualnie nie działa) i zasada działania jest taka, że zamienia on litery w wyrazie na liczby trójkami, zaczynając od 2, tak że

Kod: Zaznacz cały

a,b,c = 2; d,e,f = 3; g,h,i = 4; ...
tak, że po wczytaniu słowa np. mleko ma wyjść 65356. Program wygląda tak:

Kod: Zaznacz cały

#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int n;
    cin>>n;
    string word[n];
    int num[n];
 
    for(int i=0; i<n; i++)
    {
        cin>>word[i];
 
        num[i] = 0;
    }
 
 
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<word[i].length(); j++)
            num[i] += ((word[i][j] - 91)/3) * pow(10,word[i].length() - 1 - j);
        cout<<num[i]<<endl;
    }
 
    return 0;
}
i teraz mam pytanko bo program źle działa , mianowicie gdy daje mu 1,2,4,6,7 liter to zamienia normalnie, gdy daje mu 3,5,8 liter to ostatnia z nich jest o 1 mniejsza od oczekiwanej a gdy daje mu 9 liter to ostatnia jest o 2 mniejsza np.

Kod: Zaznacz cały

a  -  aa  -  aaa  -  aaaa  -  aaaaa  -  aaaaaa  - aaaaaaa  -  aaaaaaaa  -  aaaaaaaaa  
oczywiście napisane jedno pod drugim zamiast - daje wynik:

Kod: Zaznacz cały

2  -  22  - 221  - 2222  -  22221  -  222222  -  2222222  -  22222221  -  222222220
dowiedziałem się już połowicznie, że jest to wina tego, że nie alokuje dynamicznie pamięci tylko przypisuje "na sztywno" określając potem ilość miejsca. Więc mam pytanko, bo dalej nie rozumiem czemu te problemy, skoro nawet jakby były śmieci w tej pamięci którą rezerwuje, to usuwam je poprzez wczytywanie i przypisywanie 0, oraz drugie czy rzeczywiście tak nie wolno i zawsze trzeba bawić się dynamiczną alokacją pamięci bo inaczej program będzie świrował?
Ostatnio zmieniony 13 cze 2016, o 11:03 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania. Niepoprawnie napisany kod. Proszę zapoznaj się z http://matematyka.pl/178502.htm .
dec1
Użytkownik
Użytkownik
Posty: 714
Rejestracja: 21 mar 2016, o 21:42
Płeć: Mężczyzna
Pomógł: 191 razy

[C++][Algorytmy] Podmienianie liter trójkami

Post autor: dec1 »

Kod możesz wkleić w tagi (jak ja poniżej), a nie linkować do osobnych stron

Zakładam, że chodzi tylko o małe litery, dla dużych liter Twój program wyrzuca jakieś ujemne wyniki

Niepotrzebnie tyle zapamiętujesz, formułę można też znacznie uprościć. Popatrz jak prosto można to zaimplementować:

Kod: Zaznacz cały

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);

    int n;
    string str;
    cin >> n;

    for(int i = 0; i < n; ++i) {
        cin >> str;
        for(int j = 0; j < str.size(); ++j) {
            cout << ceil((str[j] - 96) /(float) 3) + 1;
        }
        cout << "
";
    }
    
    return 0;
}
ODPOWIEDZ