Cześć
Zastanawiam się jak można zapisać do tablicy numery pól planszy (np. "A1" "C3" "B2" itd) tak aby później z niej odczytywać i wypisywać w pętli. Proszę o jakąś podpowiedź.
- Rejestracja:prawie 13 lat
- Ostatnio:ponad 12 lat
- Postów:12

- Rejestracja:ponad 19 lat
- Ostatnio:3 miesiące
for(unsigned y=0,z=0;y<10;++y,cout<<endl)
{
for(unsigned x=0;x<10;++x,++z)
{
unsigned p=y*10+x;
if(p!=z) cout<<"To jest nie mozliwe, wiec nigdy nie nastapi"<<endl; // p==z i jest to liczba 0..99
unsigned row='A'+p/10,col=p%10;
cout<<(char)row<<col<<' ';
}
}


- Rejestracja:prawie 13 lat
- Ostatnio:ponad 12 lat
- Postów:12
char **tab = (char**) malloc(10*sizeof(char*)); // tworzymy tablice na 10 napisow
int i;
for(i = 0; i < 10; i++)
{
tab[i] = (char*) malloc(10*sizeof(char)); // tworzymy napis maksymalnie 19 literowy - 20 znak to zawsze 0
tab[i][0] = 0; // żeby automatycznie były puste napisy - jeśli nie to w pamięci będą śmieci
// jest to krok opcjonalny
}
// tutaj operujesz na napisach
// i trzeba je usunąć
for(i = 0; i < 10; i++);
free(tab[i]); // usuwanie każdego elementu tabeli
free(tab);
W ten sposób czyli rezerwując tablicę na te napisy da się to zrobić?

- Rejestracja:ponad 19 lat
- Ostatnio:3 miesiące
Widzę że absolutnie nic nie zrozumiałeś. Nie potrzebujesz żadnej tablicy napisów.
Jeżeli masz współrzędne plansza[y][x] to wyświetlasz tą komórkę jako: printf("%c%d",'A'+y,x+1);
Jeżeli masz tekst char *wsp="C7" to wyliczasz y i x: y=wsp[0]-'A'; x=wsp[1]-1;
- Rejestracja:prawie 13 lat
- Ostatnio:ponad 12 lat
- Postów:12
Mam za zadanie w funkcji zapisać historię ruchów i w dowolnym momencie wypisać ich historię.
W ten sposób co przedstawiłaś chyba nie da się tak zrobić...

- Rejestracja:prawie 13 lat
- Ostatnio:ponad 12 lat
- Postów:12
Możesz mi powiedzieć dlaczego w mojej tablicy pojawiają się krzaki zamiast właściwych nazw po przejściu na inne pole tablicy?
char *pozy[9];
char **pozy = (char**) malloc(9*sizeof(char*)); // tablica na 9 napisow
const char* pos[10]={" ","C1","C2","C3","B1","B2","B3","A1","A2","A3"};
for (s=0;s<9;s++)
pozy[s] = (char*) malloc(9*sizeof(char));
strncpy(pozy[k],pos[a],3);
printf("\n%s",pos[a]);
strncpy(pozy[m],pos[y],3);
printf("\n%s",pos[y]);
printf("\nNr posuniecia :");
for (t=1;t<=k;t++)
printf("%d, ",t);
printf("\nGracz (krzyzyk):");
for(i=0;i<=k;i++)
{
i++;
printf("%s ",pozy[i]);
}
printf("\nProgram (kolko):");
for(i=1;i<=k;i++)
{
i++;
printf("%s ",pozy[i]);// tu jest jeszcze bzdura
}

- Rejestracja:ponad 19 lat
- Ostatnio:3 miesiące
Do notowania CAŁEGO przebiegu kółko-krzyżyk 3x3 wystarczy JEDNEJ liczby long.
Użycie do tego dynamicznie przydzielanej tablicy tablic - istne barbarzyństwo.
#include <stdio.h>
#include <ctype.h>
int main()
{
unsigned long Mem,Pow;
unsigned i,p,x,y;
char buf[4];
printf("Dozwolone ruchy: A1,A2,A3,B1,B2,B3,C1,C2,C3\nPusty wiersz - koniec wprowadzania.\n\n");
for(;;)
{
printf("Notowanie ruchow kolko-krzyzyk:\n");
Mem=0;
Pow=1;
i=1;
while(i<10)
{
printf("Ruch %d: ",i);
fgets(buf,4,stdin);
if(*buf=='\n') break;
y=toupper(buf[0])-'A';
x=buf[1]-'1';
if((y<3)&&(x<3)&&(buf[2]=='\n'))
{
Mem+=(3*y+x+1)*Pow;
Pow*=10;
++i;
}
else printf("Niepoprawny ruch\n\n");
}
if(!Mem) break;
printf("\nOdtworzanie ruchow zapisanych w liczbie %ld:\n",Mem);
i=0;
while(Mem)
{
p=Mem%10-1;
y=p/3;
x=p%3;
printf("Ruch %d: %c%c\n",++i,'A'+y,'1'+x);
Mem/=10;
}
printf("\n");
}
fflush(stdin);
getchar();
return 0;
}


