Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    C++ problema con ordinamento

    Salve, non vi nascondo che sono nuovo del mondo c++ e anche del forum.
    Ho un problema. Devo ordinare i valori di un array sulla base di un particolare processo. Tuttavia la variabile rispetto alla quale ordino "score" non accetta valori del tipo ((P*Q)/W) e non capisco perchè. Vi posto il codice. I valori delle matrici sono caricati da un file esterno.
    Grazie

    codice:
    //Apro il file 
        ifstream in("C:/.../bkpBwu200-1.txt"); 
        int j = 0; 
    	int *w,*p,*q, *arrayOne, *ordinamento; int i,n,C;
    	
    //Size and capacity reading
    	in >> n; in >> C;
    	printf("TABELLA DATI\n\n");
        printf("\Cardinalita: %d.\n",n);
    	printf("\Capacita massima: %d.\n",C);	
    	p=new int[n]; w=new int[n]; q=new int[n]; arrayOne=new int[n]; ordinamento=new int(n);
    	for(i=0;i<n;i++)
    	{
    	arrayOne[i] = i;
    	in >> p[i]; in >> w[i]; in >> q[i];
    //arrayOne[i] =(((p[i])*(q[i]))/w[i]);
    	printf("\OBJ: %d, Profitto: %d, Peso: %d, Item: %d.\n", arrayOne[i], p[i], w[i], q[i]);
    			}
    	printf("\n");
    //Ciclo che recupera i dati del file riga per riga e li mette in strings 
    	while ( in ) { 
    	in.getline(strings[j++], MAX_LINE_LEN);
        } 
    	
    //ORDINAMENTO NON CRESCENTE
    
    double *score;
    int salto,tempItem;
    double tempScore;
    score[j]=((p[j]*q[j])/w[j]);    <======== NON VA PROPRIO QUI
                                            Se tolgo la divisione  va                                                   
    
       for (salto = n/2; salto > 0; salto /=2)
           for (i = salto; i < n; i++)
               for (j = i-salto; j >= 0; j-=salto) {
                   if (score[j] >= score[j+salto]) break;
                   tempScore = score[j]; score[j]=score[j+salto]; score[j+salto]=tempScore;
    			   tempItem = arrayOne[j]; arrayOne[j]=arrayOne[j+salto]; arrayOne[j+salto]=tempItem;
               }
    
    		printf("Elenco Ordinamento O(nlogn)\n");
    		printf("\n");
    		for (int i = 0; i < n; i++)
            {cout << arrayOne[i] << " ";}//end for
    		printf("\n");
    << World and Technology >>

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Cosa significa "non va proprio qui" ? Quale errore ti da' di preciso?

    Attenzione al fatto che

    double *score;

    e' un puntatore a double che non e' inizializzato (manca l'allocazione di memoria) ed e' subito utilizzato in

    score[j]=

    P.S. Utilizza i tag CODE (tasto # del forum) quando mostri del codice, altrimenti non si capisce molto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie per l'indicazione.
    Mi spiego meglio. Se anzichè mettere
    score[j]=((p[j]*q[j])/w[j]);
    metto invece ad esempio
    score[j]=((p[j]*q[j); il codice funziona perfettamente.

    Soltanto che io ho necessità di effettuare l'ordinamento sulla base di quel rapporto.
    Come dovrei inizializzare il double in tal caso? Non so venirne fuori da sta cosa
    << World and Technology >>

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Ma ti avevo fatto delle domande ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Giusto, pensaveo di aver rispsoto ..
    allora errori in compilazione nessuno .. però si blocca il programma dopo che parte.
    mi dice nativo terminato con codice 1 ...
    solo questo
    << World and Technology >>

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.