Wpisywanie pól do tablicy

0

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ź.

0

Tablica stringów?

To chyba do dziełu newbie, nie? :)

0
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<<' ';
     }
  }
0
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ć?

0

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;

0

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ć...

0

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
                        
      }    
1

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;
  }

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