HACKING 120% {Hacking, programmazione, computer & molto altro}

[PiccolaDispensa] Algoritmi base e utili su Vettori e Matrici, C++

« Older   Newer »
  Share  
view post Posted on 2/9/2013, 21:13     +1   -1

Utente

Group:
Utenti UP
Posts:
43
Reputation:
0
Location:
Kernel.

Status:


Algoritmi utili sui vettori.

//Svuotare un vettore.

CODICE
for(int i=0; i<MAXEL ; i++)
       {
     v[i]=0;
         numEL=0;
       }


//Caricare un vettore

CODICE
int i;
       do
       {
       cout <<"Dimmi il numero di elementi";
       cin>>numEL;

       for(i=0; i<MAXEL; i++)
       {
               cout <<"El n" <<i+1 <<":";
           cin >> v[i];
       }
       } while (numEL>MAXEL || numEL<0);


//Eliminare la posizione (Attenzione Pos va passata con un metodo oppure va messa in input!)
i
CODICE
nt i;
       for(i=0; i<MAXEL ; i++)
               v[i]=v[pos+1];


//Inserire un elemento (attenzione, elemento va passato!)

CODICE
int i;
          for (i=0; i<MAXEL; i++)
               v[i]=v[elemento];


Algoritmi utili sulle matrici.

//Svuotare una matrice

CODICE
int R,C;

       for(R=0; R<MAXR; R++)
       {
               for(C=0; C<MAXC; C++)
               {
                       m[R][C]=0;
               }
       }


// Inserire elementi in una matrice

CODICE
int R,C;

       for(R=0; R<MAXR; R++)
       {
               for(C=0; C<MAXC; C++)
               {
                       cin>>m[R][C];
               }
       }


//Stampare una matrice

CODICE
int R,C;

       for(R=0; R<MAXR; R++)
       {
               for(C=0; C<MAXC; C++)
               {
                       cout<<m[R][C]; cout<<" ";
               }
               cout<<endl;
       }

//Stampare la diagonale di una matrice (la matrice è di tutti 0 la diagonale viene settata con 1)

CODICE
int lato=MAXR;

       for(int i=0; i<lato; i++)
       {
               m[i][i]=1;
       }


//Stampare la diagonale inversa

CODICE
int j=0, i=MAXC-1;
       while((j<MAXC)&&(i>=0))
       {
               m[j++][i--]=1;
       }


//Stampare una riga sì e una no

CODICE
int R,C;

       for(R=0; R<MAXR; R=R+2)
       {
               for(C=0; C<MAXC; C++)
               {
                       m[R][C]=1;
               }
       }


//Stampare una colonna sì e una no

CODICE
int R,C;

       for(R=0; R<MAXR; R++)
       {
               for(C=0; C<MAXC; C=C+2)
               {
                       m[R][C]=1;
               }
       }


//Stampare il BORDO della matrice

CODICE
int bordo;
       int C,R;
       cout <<"Dimmi quanto vuoi spesso il bordo"; cout<<endl;
   cin>>bordo;

       for(R=0; R<bordo; R++)
       {
               for(C=0; C<MAXC; C++)
               {
                       if(M[R][C]==0)
                    M[R][C]=1;
                 else
                        M[R][C]=0;
               }

       }
       
       for(R=MAXR-bordo; R<MAXR; R++)
       {
               for(C=0; C<MAXC; C++)
               {
                       if(M[R][C]==0)
                    M[R][C]=1;
                 else
                        M[R][C]=0;
               }

       }


       for(C=0; C<bordo; C++)
       {
               for(R=0; R<MAXR; R++)
               {
                       if(M[R][C]==0)
                    M[R][C]=1;
                 else
                        M[R][C]=0;
               }

       }

       
       for(C=MAXC-bordo; C<MAXC; C++)
       {
               for(R=0; R<MAXR; R++)
               {
               if(M[R][C]==0)
                    M[R][C]=1;
                 else
                        M[R][C]=0;
               }
   }


Per ora è una fine.
In seguito aggiungerò altri algoritmi base sui vettori (come Lo shift a destra, shift a sinistra e shift circolare).
Per ora è così.
Spero sia utile.

Fonti: EserciziScuola + me.
 
Top
view post Posted on 2/9/2013, 21:30     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Python 3

Diagonale:

CODICE
print([[(1 if x == y else 0) for x in range(n)] for y in range(n)])


Per questo voglio un applauso :asd:

Ora ragiono anche gli altri!
 
Web  Top
view post Posted on 2/9/2013, 21:32     +1   -1

Utente

Group:
Utenti UP
Posts:
43
Reputation:
0
Location:
Kernel.

Status:


CITAZIONE (Wet Water @ 2/9/2013, 22:30) 
Python 3

Diagonale:

CODICE
print([[(1 if x == y else 0) for x in range(n)] for y in range(n)])


Per questo voglio un applauso :asd:

Ora ragiono anche gli altri!

Aahahah :asdf:
 
Top
view post Posted on 2/9/2013, 21:40     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Riga sì e riga no:

CODICE
[[(1 if y%2==0 else 0) for x in range(n)] for y in range(n)]


Riga no e sì:

CODICE
[[(1 if y%2==1 else 0) for x in range(n)] for y in range(n)]


Colonna sì e no:

CODICE
[[(1 if x%2==0 else 0) for x in range(n)] for y in range(n)]


Colonna no e sì:

CODICE
[[(1 if x%2==1 else 0) for x in range(n)] for y in range(n)]
 
Web  Top
view post Posted on 4/9/2013, 11:51     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Diagonale opposta:

CODICE
[[(1 if x+y==n-1 else 0) for x in range (n)] for y in range (n)]
 
Web  Top
view post Posted on 4/9/2013, 12:33     +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Contorno:

CODICE
[[(1 if x<1 or x>3 or y<1 or y>3 else 0) for x in range (n)] for y in range (n)]
 
Web  Top
5 replies since 2/9/2013, 21:13   242 views
  Share