Witam.
Mam problem z następującym zadaniem pochodzącym z "Symfonii C++" (ciut skrócę treść):
Do wskaźnika o nazwie szachownica przypisz adres tablicy elementów typu char o rozmiarze takim, by zajęła **88sizeof(long)bajtów pamięci.
Wiemy, że pola szachownicy oznacza się symbolami od A1do H8. Dla wygody przyjmijmy, że indeks będący cyfrą zmienia się tu częściej niż indeks będący literą <- tego zdania nie rozumiem...
Na tak zdobytym obszarze tworzone będą obiekty typu long w sposób następujący: program pyta użytkownika o pole szachownicy (najpierw o literę, później o cyfrę), a program tworzy obiekt umiejscawiając go na odpowiedniej pozycji szachownicy. Np. dla 4F będzie miejsce o adresie &szachownica[172], bo ((5*8)+3)4=172 **<- skąd w ogóle wzięło się tutaj ostatnie mnożenie przez 4? Wydaje mi się, że powinno być 58+3=43, tj. &szachownica[43] ...
W rezultacie stworzony zostanie obiekt, którego adres zapamiętaj w pierwszym wolnym elemencie przygotowanej w tym celu tablicy wskaźników o nazwie figury.
Do obiektu tego wpisz wartość, która będzie liczbowo równa indeksowi tablicy szachownica, pod którym znajduje się ten obiekt (czyli 172 wg autora, a 43 wg mnie).
Jeśli użytkownik poda symbol literowy 'X' - oznacza to koniec pętli dodawania nowych obiektów. Wypisz wtedy na ekranie kolejno wartości wszystkich tak stworzonych obiektów. Zlikwiduj obiekty i zakończ program.
Siłowałem się z tym zadaniem i oto, co udało mi się zrobić:
#include <iostream>
using namespace std;
// A ma w kodzie ASCII wartosc 65
int main()
{
char *szachownica = new char[8*8*sizeof(long)];
cout << "Ile figur chcesz stworzyc?: ";
unsigned short ile;
cin >> ile;
long int *figury[ile];
for(int i=0; i<ile; i++)
{
int i=0;
cout << "Na jaim polu szachownicy mam umiescic nowy obiekt typu long?"
"\nPodaj symbol literowy: ";
char symbol;
cin >> symbol;
if(symbol == 'X' || symbol == 'x') break;
cout << "\nPodaj symbol cyfrowy: ";
unsigned short cyfra;
cin >> cyfra;
char *gdzie = &szachownica[0];
figury[i] = new (gdzie + (symbol - 65) * 8 + cyfra) long;
*figury[i] = (symbol - 65) * 8 + cyfra;
}
for(int i=0; i<ile; i++)
{
cout << *figury[i] << endl;
}
delete [] szachownica;
delete [] figury;
system("pause");
return 0;
}
Nie wiem dlaczego przy próbie stworzenia więcej niż jednej 'figury' (już podczas pracy programu), gdy ma dojść do ostatniej pętli pokazującej wyniki, program się zawiesza i Windows mi jakiś błąd wyrzuca.
Druga sprawa - jak widać nie wiem jak stworzyć tablicę figur "na tyle dynamiczną", żeby nie było potrzeby podawania liczby figur na początku i wtedy możliwość zakończenia będzie wyłącznie po podaniu znaku 'X'.
Oczywiście proszę również o wskazaniu błędów i sugestię ich naprawienia.
(Aha, mam nadzieję, że odpowiedni dział wybrałem, aczkolwiek jestem 'newbie', więc być może tam powinienem ten temat założyć...)