Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ordinamento
Forum - C/C++ - ordinamento - Pagina 4

Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:46
Martedì, 10/06/2008
Testo quotato

Postato originariamente da volley.sil:

mi conciene trasformare i e  j in puntatori o lenght e size in variabili???



Non e' una questione di convenienza ... tieni presente, per rispondere alla tua domanda, che non ha molto senso confrontare due puntatori ...

PM
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 10:30
Mercoledì, 11/06/2008
ciao gantonio...
Forse qualche cosa sono riuscita a correggere...
ho qualke piccolo problema con la malloc che mi segnala sempre errore...

Ti posto il sorgente così puoi consigliarmi quali altre modifiche posso fare...
Mi stai veramente dando una mano e se insieme riusciamo a fare andare questo benedetto progetto te ne sarò molto grata...

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void exchange(char *list, int i, int j)
{
    
    int tmp=list;
    
    list=list[j];
    printf("  ciao 9ter");
    list[j]=tmp;
}

int partition(char *list, int *length, int *size)
{

     int i,j;
     int x, pivot;
    
     i=*length;
     j=*size;
     printf(" %d ",size);
      printf("  %d  ",length);
    x=rand()%(*size-*length+1)+*length;

    pivot=x;
    
    while(i<j)
    {
        while(j>*length && list[j]>pivot)
               j--;
        while(i<*size && list<=pivot)
              i++;
         printf("ciao 9bis");
        if(i<j)
        {
                exchange(list,i,j);
                
        }
        
    }
    exchange(list,*length,j);
    return j;
}

char quicksort(char *list, int *length, int *size)
{
    int q;
    if(length<size)
    {
        (int)q=partition(list,length,size);
        
        quicksort((char*)list,(int*)length,(int*)(q)-1);
        quicksort((char*)list,(int*)(q)+1,(int*)size);
    }
    
    return *list;
}

void readsize(int *length, int *size) {
    FILE *in=fopen("input_list.txt","r");
    int i=0,j=0;
    char tmp;
printf("ciao2");
    while(fscanf(in,"%c",&tmp)!=EOF && tmp!='\n') j++;
    rewind(in);
    printf("ciao3");
    while(fscanf(in,"%*s\n")!=EOF) i++;
    printf("ciao4");
    length=(int*)i; size=(int*)j;
    printf("  %d ",length);
    printf("  %d ",size);
    printf("ciao5");
    fclose(in);
}

char *readline(FILE *in,int *size) {
    char *line=(char *)malloc( sizeof(char)), tmp;
    int i=0;
printf("ciao9");
    while(i<*size && fscanf(in,"%c",&line)!=EOF) i++;
    fscanf(in,"%c",&tmp);
    
    if(tmp!='\n')
    {
        printf("Error: malformed file\n");
        return NULL;
    }    

    return line;
}

char **loadlist(char *list, int *length, int *size)
{
    int i;
    //char list;
    FILE *in=fopen("input_list.txt","r");

    readsize(length,size);
printf("ciao6");
    list=(char *)malloc(sizeof(char));

    for(i=0; i<*length; i++)
        printf(" %d",i);
        list=readline(in,size);
            
    
                
    fclose(in);

    return list;
}
void printlist(char *list, int *length, int *size,int n)
{
    int i;
    FILE *fin=fopen("output_list.txt","a");
    printf("ciao10");
    for(i=0; i<n; i++)
    printf("ciao11");
        fprintf(fin,"%c ",&list);
        printf("ciao12");
    fprintf(fin,"\n");
    fclose(fin);
}

int main(int n)
{
    system("cls");
    int i;
    char list;
        
    int length,size;
    time_t start, end;

    printf("ciao");
    
    list=loadlist((char*)list, (int*)length,(int*)size);
    printf("ciao1");
    start=clock();
    list=quicksort((char*)list,(int*)length,(int*)size);
    end=clock();
    printf("\nTempo impiegato: %.2f\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
    
    printlist((char*)list,(int*)length,(int*)size,(int)n);

    system("PAUSE");
    return 0;
      
}

Ora il compilatore mi segnale:
in loadlist:
Linea 106 - [Warning] assignment makes integer from pointer without a cast;
Questo warning cosa significa???
I cast non sono ad esempio (char*), io provo a metterli ma non riesco a risolvere l'errore.

Linea 112 - [Warning] return makes pointer from integer without a cast;

In function main:
Linea 138 - incompatible types in assignment;

Dai sono solo 2 Warning e un errore...ho migliorato un po' o no??
Grazie ancora..
Aspetto una tua risposta

PM
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 10:46
Mercoledì, 11/06/2008
Dato che io non posso sapere quale sia la linea con l'errore (non posso contare la linea 106 ...), dimmi tu quali sono le linee ...

E, da ora in poi, inserisci il codice tra i tag code /code (usa il tasto Code a sinistra di questa finestra) altrimenti non si capisce nulla ...

PM
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 12:05
Mercoledì, 11/06/2008
a opk non lo sapevo....
Adesso te lo inserisco..
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void exchange(char *list, int i, int j)
  6. {
  7.    
  8.         int tmp=list[i];
  9.    
  10.         list[i]=list[j];
  11.     printf("  ciao 9ter");
  12.         list[j]=tmp;
  13. }
  14.  
  15. int partition(char *list, int *length, int *size)
  16. {
  17.  
  18.          int i,j;
  19.      int x, pivot;
  20.    
  21.      i=*length;
  22.      j=*size;
  23.      printf(" %d ",size);
  24.       printf("  %d  ",length);
  25.         x=rand()%(*size-*length+1)+*length;
  26.  
  27.         pivot=x;
  28.        
  29.         while(i<j)
  30.     {
  31.                 while(j>*length && list[j]>pivot)
  32.                j--;
  33.                 while(i<*size && list[i]<=pivot)
  34.               i++;
  35.          printf("ciao 9bis");
  36.                 if(i<j)
  37.         {
  38.                 exchange(list,i,j);
  39.                
  40.         }
  41.        
  42.         }
  43.         exchange(list,*length,j);
  44.         return j;
  45. }
  46.  
  47. char quicksort(char *list, int *length, int *size)
  48. {
  49.         int q;
  50.         if(length<size)
  51.     {
  52.                 (int)q=partition(list,length,size);
  53.        
  54.                 quicksort((char*)list,(int*)length,(int*)(q)-1);
  55.                 quicksort((char*)list,(int*)(q)+1,(int*)size);
  56.         }
  57.        
  58.         return *list;
  59. }
  60.  
  61. void readsize(int *length, int *size) {
  62.         FILE *in=fopen("input_list.txt","r");
  63.         int i=0,j=0;
  64.         char tmp;
  65. printf("ciao2");
  66.         while(fscanf(in,"%c",&tmp)!=EOF && tmp!='\n') j++;
  67.         rewind(in);
  68.         printf("ciao3");
  69.         while(fscanf(in,"%*s\n")!=EOF) i++;
  70.         printf("ciao4");
  71.         length=(int*)i; size=(int*)j;
  72.         printf("  %d ",length);
  73.         printf("  %d ",size);
  74.         printf("ciao5");
  75.         fclose(in);
  76. }
  77.  
  78. char *readline(FILE *in,int *size) {
  79.         char *line=(char *)malloc( sizeof(char)), tmp;
  80.         int i=0;
  81. printf("ciao9");
  82.         while(i<*size && fscanf(in,"%c",&line[i])!=EOF) i++;
  83.         fscanf(in,"%c",&tmp);
  84.        
  85.         if(tmp!='\n')
  86.     {
  87.                 printf("Error: malformed file\n");
  88.                 return NULL;
  89.         }      
  90.  
  91.         return line;
  92. }
  93.  
  94. char **loadlist(char *list, int *length, int *size)
  95. {
  96.         int i;
  97.         //char list[i];
  98.         FILE *in=fopen("input_list.txt","r");
  99.  
  100.         readsize(length,size);
  101. printf("ciao6");
  102.         list=(char *)malloc(sizeof(char));
  103.  
  104.         for(i=0; i<*length; i++)
  105.                 printf(" %d",i);
  106.                 list[i]=readline(in,size);
  107.                        
  108.        
  109.                                
  110.         fclose(in);
  111.  
  112.         return list[i];
  113. }
  114. void printlist(char *list, int *length, int *size,int n)
  115. {
  116.         int i;
  117.         FILE *fin=fopen("output_list.txt","a");
  118.         printf("ciao10");
  119.         for(i=0; i<n; i++)
  120.         printf("ciao11");
  121.                 fprintf(fin,"%c ",&list[i]);
  122.                 printf("ciao12");
  123.         fprintf(fin,"\n");
  124.         fclose(fin);
  125. }
  126.  
  127. int main(int n)
  128. {
  129.     system("cls");
  130.         int i;
  131.     char list[i];
  132.        
  133.         int length,size;
  134.         time_t start, end;
  135.  
  136.         printf("ciao");
  137.        
  138.         list=loadlist((char*)list, (int*)length,(int*)size);
  139.         printf("ciao1");
  140.         start=clock();
  141.         list[i]=quicksort((char*)list,(int*)length,(int*)size);
  142.         end=clock();
  143.         printf("\nTempo impiegato: %.2f\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
  144.        
  145.         printlist((char*)list,(int*)length,(int*)size,(int)n);
  146.  
  147.     system("PAUSE");
  148.         return 0;
  149.      
  150. }


La linea 106 è: in loadlist - list=readline(in,size);
la linea 112 è : in loadlist - return list;
La linea 138 è : nel main - list=loadlist((char*)list, (int*)length,(int*)size);

PM
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 14:49
Mercoledì, 11/06/2008
Senti ... leggendo il codice, ho visto che ci sono un gran numero di errori "concettuali" ...

Non basta rimediare ad un errore di compilazione mettendo un cast ... il cast non rimedia all'errore sempre e comunque ma si usa solo quando e' lecito ... tu l'hai usato a sproposito proprio per correggere errori derivanti dall'impostazione di tutto il codice ...

In parole povere, il codice andrebbe riscritto totalmente ...

So di non esserti di aiuto, ma l'unico modo sarebbe riscrivere tutto il codice io e, sinceramente, non ne ho il tempo ne' la voglia ... soprattutto perche' ho capito che tu non hai assolutamente idea di quello che scrivi (non distingui un puntatore da un array, un elemento di un vettore da un doppio puntatore ... e cosi' via) e quindi so che non ti servirebbe che te lo scrivessi io di sana pianta ...

Forse potresti consegnare il compito, ma non rientra nei miei principi ...

Non so se qui qualcuno te lo scrivera' tutto da zero ma ti posso suggerire di provarci su altri forum

forum.html.it
forum.masterdrive.it
www.p2pforum.it

ma non ti assicuro che prendano bene la tua richiesta ...

Ultima modifica effettuata da gantonio il 11/06/2008 alle 14:55
PM
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 9:27
Giovedì, 12/06/2008
mi puoi dire almeno qyuali sono gli errori concettuali fi cui parli???

PM
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 9:53
Giovedì, 12/06/2008
non ce la faresti a farmi questo grande favore neanke entro il 24...come hai avuto il tempo in questi giorni di darci un'ochiata potresti lavorarci.
xkè come hai deto te le basi ci sono sarebe da riordinare un po'...
Ti prego è molto importante!!!!!
please

PM
Avatar
volley.sil (Normal User)
Rookie


Messaggi: 39
Iscritto: 19/05/2008

Segnala al moderatore
Postato alle 13:26
Giovedì, 12/06/2008
Ciao,
parlando con il professore ho capito che il mio progetto deve essere implementando in questo modo,utilizzando questi tre file e eseguendolo in ambiente unix; io utilizzo cygwin.
Adesso mi ordina solo la prima stringa del mio file di input(che è questo)

cdaabsvt
aaaaaaaa
gggggggg
eeeeeeee
ffffffff
bbbbbbbb
zzzzzzzz
rrrrrrrr

mi potresti aiutare su come far ordinare anche le altre, non penso sia un grosso errore però non so quale sia.. grazie



Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "util.h"
  4. #include <time.h>
  5.  
  6.  
  7. void exchange(char *list, int i, int j)
  8. {
  9.         char tmp=list[i];
  10.         list[i]=list[j];
  11.         list[j]=tmp;
  12. }
  13.  
  14. int partition(char *list, int p, int r)
  15. {
  16.         int i=p, j=r,pivot;
  17.         char x;
  18.  
  19.         x=rand()%(r-p+1)+p;
  20.         exchange(list,x,p);
  21.         pivot=list[p];
  22.  
  23.         while(i<j)
  24.     {
  25.                 while(j>p && list[j]>pivot) j--;
  26.                 while(i<r && list[i]<=pivot) i++;
  27.                 if(i<j) exchange(list,i,j);
  28.         }
  29.         exchange(list,p,j);
  30.         return j;
  31. }
  32.  
  33. void quicksort(char *list, int p, int r)
  34. {
  35.         int q;
  36.         if(p<r)
  37.     {
  38.                 q=partition(list,p,r);
  39.                 quicksort(list,p,q-1);
  40.                 quicksort(list,q+1,r);
  41.         }
  42. }
  43.  
  44. int main(int argc, const char *argv[])
  45. {
  46.         char *list=(char *)malloc(1000000000*sizeof(char));
  47.     int n;
  48.         clock_t start, end;
  49.  
  50.         /*if(argc!=3) {
  51.                 printf("Usage: quicksort <list input> <list output>\n");
  52.                 return 1;
  53.         }*/
  54.         srand(time(NULL));
  55.         readlist((char *)argv[1],list,&n);
  56.         start=clock();
  57.         quicksort(list,0,n-1);
  58.         end=clock();
  59.         printf("%g\n",(double)(end-start)/(double)CLOCKS_PER_SEC);
  60.         printlist((char *)argv[2],list,n);
  61.        
  62.         return 0;
  63. }

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include "util.h"
  3.  
  4. void readlist(char *inputlist, char *list, int *n) {
  5.         FILE *in=fopen("inputlist.txt","r");
  6.         int i=0,j=0;
  7.         char x;
  8.        
  9.         while(fscanf(in,"%c",&x)!=EOF && x!='\n')
  10.         list[i++]=x;
  11.         (*n)=i;
  12.         rewind(in);
  13.         while(fscanf(in,"%*s\n")!=EOF)
  14.  
  15.         fclose(in);
  16. }
  17.  
  18. void printlist(char *outputlist, char *list, int n)
  19. {
  20.         int i;
  21.         FILE *out=fopen("outputlist.txt","w");
  22.        
  23.         for(i=2; i<n; i++)
  24.                 fprintf(out,"%c ",list[i]);
  25.         fprintf(out,"\n");
  26.         fclose(out);
  27. }

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void readlist(char *inputlist, char *list, int *n);
  5.  
  6. void printlist(char *outputlist, char *list, int n);



PM
Pagine: [ 1 2 3 4 5 ] Precedente | Prossimo