Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    2

    [c++]MATRICE CONCENTRICA

    ciao sono nuovo del forum e volevo porvi subito un quesito........
    devo fare un programma che tratti una matrice N*N e la devo riempire in modo concentrico.Si parte da 1 e si incremente tutte le volte.

    io ho provato a farlo ma nn capisco una cosa.Per semplicità ho riempito prima la cornice della matrice favendo incremetere una variabile di 1 ma non torna poichè arrivati alla fine della prima riga che è composta da questi numeri:

    01234
    1
    2
    3
    4

    e così via io vorrei che il risultato fosse il segunte

    1 2 3 4
    12 13 14 5
    11 16 15 6
    10 9 8 7
    adesso vi posto il codice e ditemi cosa sbaglio e correggetemelo pure!!!

    grazie in anticipo
    #include <iostream.h>
    #include <windows.h>
    #include <stdio.h>

    void main (void)
    {
    int mat[100][100],n,k=1,j=0,l=1;
    cout<<"inserisci n"<<endl;
    cin>>n;
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<n;j++)
    {

    mat[i][j]=0;
    }
    }

    for(j=0;j<n;j++,k++)
    {

    mat[0][j]=k;
    mat[j][n-1]=k;
    mat[n-1][j]=k;
    mat[j][0]=k;
    }
    for(i=0;i<n;i++)
    {
    for(int j=0;j<n;j++)
    {
    cout<<mat[i][j];

    }
    cout<<endl;
    }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Questa e' una delle soluzioni possibili

    codice:
    #define N 8
    
    int mat[N][N];
    
    int main()
    {
      int i=0, j=0, els=N*N, cel=1;
      int st0=N, st1=N, st2=-1, st3=0;
      int currDir = 0;
    
      while(els--)
      {
        mat[i][j] = cel++;
    		
        switch(currDir)
        {
          case 0: // dx
            j++;
            if(j == st0)
            {
              i++;  j--;
              currDir++;
            }
            break;
          case 1: // dn
            i++;
            if(i == st1)
            {
              i--;  j--;
              currDir++;
            }
            break;
          case 2: // sz
            j--;
            if(j == st2)
            {
              i--;  j++;
              currDir++;
            }
            break;
          case 3: // up
            i--;
            if(i == st3) 
            {
              i++;  j++;
    						
              currDir=0;
    
              st0--; st1--;
              st2++; st3++;
            }
            break;
        }
      }
    
      printf("\n");
    
      for(i=0; i<N; i++)
      {
        for(j=0; j<N; j++)
          printf("%5d ", mat[i][j]);
        printf("\n\n");
      }
    
      return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.