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
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ł?