Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso
Basato su piattaforma Qualcomm Snapdragon X Plus a 8 core, il nuovo Microsoft Surface Pro 12 è un notebook 2 in 1 molto compatto che punta sulla facilità di trasporto, sulla flessibilità d'uso nelle differenti configurazioni, sul funzionamento senza ventola e sull'ampia autonomia lontano dalla presa di corrente
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet!
Il REDMAGIC Astra Gaming Tablet rappresenta una rivoluzione nel gaming portatile, combinando un display OLED da 9,06 pollici a 165Hz con il potente Snapdragon 8 Elite e un innovativo sistema di raffreddamento Liquid Metal 2.0 in un form factor compatto da 370 grammi. Si posiziona come il tablet gaming più completo della categoria, offrendo un'esperienza di gioco senza compromessi in mobilità.
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2
Dopo un mese di utilizzo intensivo e l'analisi di oltre 50 scatti, l'articolo offre una panoramica approfondita di Nintendo Switch 2. Vengono esaminate le caratteristiche che la definiscono, con un focus sulle nuove funzionalità e un riepilogo dettagliato delle specifiche tecniche che ne determinano le prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-01-2011, 01:19   #1
mic85rm
Senior Member
 
Iscritto dal: Dec 2003
Città: roma
Messaggi: 1629
[c]lista in c e problemi vari

Codice:
#include<stdio.h>
#include<time.h>
#include"msg.h"
#include"const.h"


struct posizione {
   int x;
   int y;
   struct posizione *pun;
};
struct posizione *testa=NULL;

struct uscita {
   int x;
   int y;
};


/* prototipi delle funzioni */

int empty(struct posizione *p);
struct uscita crea_uscita_labirinto(char **,int ,int );
struct posizione *crea_entrata_labirinto(char **matrice,int eu_lrig,int eu_lcol);
void visualizza_entrata(struct posizione *);
int exit1(struct posizione *p,struct uscita USC);
char **alloca_matrice(int ,int );
int righe_labirinto();
int colonne_labirinto();
int percentuale_muri_labirinto();
void muri_interni(char **,int ,int ,int);
int mostra_labirinto(char **,int ,int );
int scrivi_muro( char **,int ,int );
/* fine della dichiarazione dei prototipi delle funzioni */

int main()
{
    struct posizione *P; // puntatore della lista
    struct uscita ESCI;
    char **L;//puntatore al labirinto
    int N,M,K,conta=0;
    N=righe_labirinto();
    M=colonne_labirinto();
    K=percentuale_muri_labirinto();
    L=alloca_matrice(N,M);
    conta=scrivi_muro(L,N,M);
    muri_interni(L,K,N,M);
    P = crea_entrata_labirinto(L,N,M); 
    ESCI=crea_uscita_labirinto(L,N,M);
    while((!exit1(P,ESCI))&&(!empty(P)))
    {
    mostra_labirinto(L,N,M);
    if(incrocio(P,L))
     {
      if(esplorato(P,L))
      {
       pop(P);
      }
      else 
      {
       push(P);
      }
      avanza(P,L);
     }
     else if(vcieco(P,L))
     {
      top(P);
      if(esplorato(P,L))
      {
       pop(P);
      }  
      else
      {
       avanza(P,L);
      }  
     }       
     else{ avanza(P,L);}}//chiusura while
    if (empty(P))
    {
     printf("\tsono all'ingresso no uscita");
    }
    else printf("\tevviva ho trovato l'uscita");//chiusura else principale
    system("PAUSE");
    free(L);
    return 0;
}
    
   
struct posizione *crea_entrata_labirinto(char **matrice,int eu_lrig,int eu_lcol)
{
 struct posizione *coordinate_entrata, *punt;
 int i,j,entrata=0;
 srand(time(NULL));
 coordinate_entrata = (struct posizione *)malloc(sizeof(struct posizione));
 while(entrata==0)
 {
  i=rand()%eu_lrig;
  if((i==0)||(i==eu_lrig-COSTANTE1))//serve per gli spigoli
  {
   j=rand()%eu_lcol;
   if ((j!=0)&&(j!=eu_lcol-COSTANTE1))//serve per gli spigoli
   {
    matrice[i][j]=SIMBOLO_ENTRATA;
    entrata=1;
   }
  }
  else
  {
   j=rand()%eu_lcol;
   if ((j==0)||(j==eu_lcol-1))//serve per gli spigoli
   { 
    matrice[i][j]=SIMBOLO_ENTRATA;
    entrata=1;
   }
  
  }
 }
 coordinate_entrata->x=i;
 coordinate_entrata->y=j;
 coordinate_entrata->pun = NULL;
 return(coordinate_entrata);
}


void visualizza_entrata(struct posizione *p)
{
  

   /* ciclo di scansione */
   while(p != NULL)
   {
      printf("\tx=%d", p->x); // visualizza l'informazione
      
      printf("\ty=%d", p->y); // visualizza l'informazione
     
      p = p->pun; // scorre di un elemento
   }

 //  printf("\nOK\n");
} 

char **alloca_matrice(int all_righe,int all_colonne)
{      
  char **Labirinto;
  int ii=0;
  Labirinto=(char **)malloc(sizeof(char*)*all_righe);
  for(ii=0;ii<all_righe;ii++)
  { 
    Labirinto[ii]=(char *)malloc(sizeof(char)*all_colonne);  
  } 
  return (Labirinto);
}


int righe_labirinto()
{ 
 int num=0;
 printf("inserisci n:");
 scanf("%d",&num);
 return num;
}

int colonne_labirinto()
{
 int num=0;
 printf("inserisci m:");
 scanf("%d",&num);
 return num;
}
     
int percentuale_muri_labirinto()
{      
 int num=0;
 printf("inserisci k:");
 scanf("%d",&num);
 return num;
}
     
int mostra_labirinto(char **matrice,int eu_lrig,int eu_lcol)
{
 int i=0,j=0;
 printf("\n");
 for(i=0;i<eu_lrig;i++)
 {
  for(j=0;j<eu_lcol;j++)
  {
   printf("%c",matrice[i][j]);
  }
  printf("\n");
 }
 return 0;  
}


int scrivi_muro( char **matrice,int sm_lrig,int sm_lcol)
{
 int i,j,conta=0,muri=0;
 for (i=0;i<sm_lrig;i++)
 {
  for (j=0;j<sm_lcol;j++)
  {
   if(((j!=0)&&(i!=0))&&((j!=sm_lcol-COSTANTE1)&&(i!=sm_lrig-COSTANTE1)))
   {
    matrice[i][j]=SIMBOLO_VUOTO;
   }
   else
   {
    matrice[i][j]=SIMBOLO_MURO;
   }
   conta++;
  }

 }
 return conta;
}

void muri_interni(char **matrice,int kpercentuale,int mi_lrig,int mi_lcol)
{
 srand(time(NULL));//serve per la random
 int i,j,muri=0;
 while((muri<kpercentuale)&&muri!=((mi_lcol-COSTANTE2)*(mi_lrig-COSTANTE2)))
 {
  i=rand()%mi_lrig;
  j=rand()%mi_lcol;
  if(((j!=0)&&(i!=0))&&((j!=mi_lcol-COSTANTE1)&&(i!=mi_lrig-COSTANTE1))&&matrice[i][j]!=SIMBOLO_MURO)
  {
   matrice[i][j]=SIMBOLO_MURO;
   muri++;
  }
 }  
// return 0;
}


struct uscita crea_uscita_labirinto(char **matrice,int eu_lrig,int eu_lcol)
{
 int i,j,uscita=0;
 struct uscita posizione;
 while(uscita==0)
 {
  i=rand()%eu_lrig;
  if ((i==0)||(i==eu_lrig-COSTANTE1))  //se si trova all'inizio o alla fine della riga
  {
 //bisogna mette un controllo per far si che l'entrata e l'uscita non combacino
   j=rand()%eu_lcol;
   if ((j==0)||(j==eu_lcol-COSTANTE1))   //serve per nn entrare negli spigoli :-)
   {
 
   }
   else
   {
    posizione.x=i;
    posizione.y=j;
    matrice[i][j]=SIMBOLO_USCITA;
    uscita=1;
   }
  }
  else
  {
   j=rand()%eu_lcol;
  
  posizione.x=i;
    posizione.y=j;
   matrice[i][j]=SIMBOLO_USCITA;
   uscita=1;
 
  }
  return posizione;
 }
} 

 

int empty(struct posizione *p){
     visualizza_entrata(p);           
    return p==NULL;
    } 
    
int esplorato(struct posizione *p,char **L){
    printf("\t\t ESPLORATO\n");
     visualizza_entrata(p);
   int e,x,y;
    x=p->x;
    y=p->y;
    
    e=VERO;
    if((L[x-1][y]==SIMBOLO_VUOTO)||(L[x][y-1]==SIMBOLO_VUOTO)||(L[x+1][y]==SIMBOLO_VUOTO)||(L[x][y+1]==SIMBOLO_VUOTO))
    {e=FALSO;}
    return e;
    }//fine esplorato
    
 int vcieco(struct posizione *p,char **L){
     
   int c,x,y;
    x=p->x;
    y=p->y;
 c=FALSO; 
 if (((p->x)-1)>=0) {
 if((L[x-1][y]!=SIMBOLO_VUOTO)&&(L[x][y-1]!=SIMBOLO_VUOTO)&&(L[x+1][y]!=SIMBOLO_VUOTO)&&(L[x][y+1]!=SIMBOLO_VUOTO))
    {c=VERO;}}
    return c;
    }//fine esplorato   


int exit1(struct posizione *p,struct uscita USC){
   printf("\t\t USCITA\n");
    int u,x,y,xu,yu;
  
    u=FALSO;
    if((p->x==USC.x)&&(p->y==USC.y)){u=VERO;}
    return u;
    }
  
 int avanza(struct posizione *p,char **L){   //sicuro nn va
  printf("\t\tAVANZA\n");
   int x,y;
    x=p->x;
    y=p->y;  
   if((L[x+1][y]==SIMBOLO_VUOTO)||(L[x+1][y]==SIMBOLO_USCITA))
   {x++;
   }
   else{
         if((L[x][y+1]==SIMBOLO_VUOTO)||(L[x][y+1]==SIMBOLO_USCITA))
         {y++;}
         else{
              if((L[x-1][y]==SIMBOLO_VUOTO)||(L[x-1][y]==SIMBOLO_USCITA))
              {x--;}
              else{
              if((L[x][y-1]==SIMBOLO_VUOTO )||(L[x][y-1]==SIMBOLO_USCITA))
              {y--;}
              }
         }
   }
   //devo scrivere i valori dentro al puntatore :D
   p->x=x;
   p->y=y;
   L[x][y]=SIMBOLO_CAMMINO;
}

int pop(struct posizione *p){ //mamma mia
    printf("\t\t POP\n");
    struct posizione *temp;
    temp=testa;
    testa=p->pun;
         free(temp);       
                
                 }
int push(struct posizione *p){
    printf("\t\t Push\n");
    struct posizione *newp;
newp=(struct posizione *)malloc(sizeof(struct posizione));
  if (newp!=NULL){
                  newp->x=p->x;
  newp->y=p->y;
  newp->pun=testa;
  testa=newp;

  }else{ return FALSO;}
  
 visualizza_entrata(p); 
    }//mamma mia



int top(struct posizione *p){
    printf("\t\t TOP\n");

p->pun=testa;

    }
    
    
int incrocio(struct posizione *p,char **lab){
    printf("\t\tINCROCIO\n");
    int pi;
    //x=p->x;
    //y=p->y;
   // printf("incrocio[%d][%d]",x,y);
   visualizza_entrata(p);
    pi=0;
    if (((p->x)-1)>=0) {//bisogna mettere il controllo anche se è maggiore del massimo n e m
    if((lab[(p->x)-1][p->y]==SIMBOLO_VUOTO)||(lab[(p->x)-1][p->y]==SIMBOLO_CAMMINO)){pi++;}
    if((lab[p->x][p->y-1]==SIMBOLO_VUOTO)||(lab[p->x][p->y-1]==SIMBOLO_CAMMINO)){pi++;}
    if((lab[(p->x)+1][p->y]==SIMBOLO_VUOTO)||(lab[(p->x)+1][p->y]==SIMBOLO_CAMMINO)){pi++;}
    if((lab[p->x][p->y+1]==SIMBOLO_VUOTO)||(lab[p->x][p->y+1]==SIMBOLO_CAMMINO)){pi=pi++;}
   }
  //  printf("i=%d - FINE INCROCIO",i);
    //system("PAUSE");
    return (pi>2);
    }
questo programma crea un array bidimensionale con un entrata e un uscita e cerca di scovarne il percorso se esiste...
sto avendo dei problemi con le push pop e top...
critiche consigli e tutto quello che vi frulla per la testa sono ben accetti...

Ultima modifica di mic85rm : 18-01-2011 alle 01:22.
mic85rm è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2011, 18:13   #2
mic85rm
Senior Member
 
Iscritto dal: Dec 2003
Città: roma
Messaggi: 1629
offro una birra a tutti quelli che mi daranno uno mano

anche solo per pulire il codice
mic85rm è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Microsoft Surface Pro 12 è il 2 in 1 più compatto e silenzioso Microsoft Surface Pro 12 è il 2 in 1 pi&u...
Recensione REDMAGIC Astra Gaming Tablet: che spettacolo di tablet! Recensione REDMAGIC Astra Gaming Tablet: che spe...
Dopo un mese, e 50 foto, cosa abbiamo capito della nuova Nintendo Switch 2 Dopo un mese, e 50 foto, cosa abbiamo capito del...
Gigabyte Aero X16 Copilot+ PC: tanta potenza non solo per l'IA Gigabyte Aero X16 Copilot+ PC: tanta potenza non...
vivo X200 FE: il top di gamma si è fatto tascabile? vivo X200 FE: il top di gamma si è fatto ...
Intel prepara l'architettura 'Unified Co...
Threadripper PRO 9000 WX-Series e Radeon...
Il decimo lancio del razzo spaziale Spac...
Nuova immagine per la cometa interstella...
Usi la 'melanzana' su Tinder? Ecco perch...
AWS annuncia molte novità legate ...
Il lato oscuro della speculazione immobi...
Glyph Matrix e design asimmetrico: ...
Il sasso più costoso di sempre: p...
Ericsson punta sull'IA: arrivano nuove s...
Iliad: GIGA 200 e GIGA 150 tra le offert...
Questo power bank wireless ricarica alla...
iPhone 17 Pro e Pro Max: il nu...
Riunioni su Teams direttamente dall'auto...
È record: il nuovo orologio atomi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v