Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Ordinare un vettore ?

    Creare un programma che chieda numeri interi fino a quando la somma di questi non superi 30. I numeri che verranno inseriti dovranno essere memorizzati in un vettore mano mano che questi saranno chiesti, quindi bisognerà ordinarli in ordine crescente.
    Spero di essere stato chiaro...
    In particolare il problema è che il programma non prosegue dopo che mi chiede di inserire il numero per la seconda volta:

    codice:
    #include <stdio.h>
    int main()
    { 
    	int vett[99],vett2[99],somma=0,n=0,i,l,j,var,s;
    
    		while(somma<30)
    		{
    			if(n==0)
    			{ 
    				printf("inserire il primo numero");
    				scanf("%i",&j);
    				vett[0]=j;
    				vett2[0]=j;
    				n++;
    			}
    			else
    			{
    				printf("n=%i Inserire il secondo numero",n);
    				scanf("%d",&s);
    				printf("oka");
    				for(i=0;i<n;i++)
    				{	printf("ok");
    					if(s<vett[i])
    					{
    						vett2[i]=s;
    						for(l=i;l=n;l++)
    						{
    							vett[i+1]=vett2[l];
    						}
    					}
    					else
    					{
    						vett2[i+1]=s;
    						for(l=0;l<i;l++)
    						{
    							vett[l]=vett2[l];
    						}
    						for(l=i+1;l=n;l++)
    						{	
    							vett[l]=vett2[l];
    						}
    					}
    				}
    				n++;
    			}
    			for(i=0;i<n;i++)
    			{	
    				vett[i]=vett2[i];
    			}
    			for(i=0;i<n;i++)
    			{
    				somma+=vett[i];
    			}
    		}
    		for(i=0;i<n;i++)
    		{
    			printf("%i\n",vett[i]);
    		}
    		return 0;
    }
    Tengo a precisare che sono agli inizi e vorrei risolvere l'algoritmo solo con le istruzioni che ho utilizzato qui. Grazie in anticipo.

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Alla trentanovesima riga hai scritto:
    codice:
    for(l=i+1;l=n;l++)
    Ma la condizione di prosecuzione del ciclo deve essere un confronto,non un' assegnazione.
    Cioè l==n.
    Provalo e vedi se ti da altri problemi (ma quanti ok stampi?L'ok era di debug vero?).

  3. #3
    Per ordinare un vettore esistono svariati algoritmi, alcuni più didattici altri meno. Se sei agli inizi ti consiglio di procedere seguendo quest'ordine (versione base degli algoritmi, lascia perdere per adesso gli sviluppi e i miglioramenti):


    Bubble Sort
    Selection Sort
    Insertion Sort
    Shell Sort
    Merge Sort
    Quick Sort
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    l linguaggio è obbligatorio nel titolo, come da Regolamento interno.

    Correggo io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Scusate per non aver scritto il linguaggio nel titolo, grazie

    Pessimo errore! Era tardissimo ieri sera ed ho fatto un errore pessimo...ora vedo se riesco a combinare qualcosa e vi faccio sapere grazie a tutti.

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Beh,pessimo no !
    Era sicuramente una distrazione.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    edit
    questo è il codice corretto...che non funziona...
    codice:
    #include <stdio.h>
    int main()
    {
    	int vett[99],vett2[99],somma=0,n=0,i,l,j,var,s;
    
    		while(somma<30)
    		{
    			if(n==0)
    			{
    				printf("inserire il primo numero");
    				scanf("%i",&j);
    				vett[0]=j;
    				vett2[0]=j;
    				n++;
    			}
    			else
    			{
    				printf("n=%i Inserire il secondo numero",n);
    				scanf("%d",&s);
    				printf("oka");
    				for(i=0;i<n;i++)
    				{
    					if(s<vett[i])
    					{
    						vett2[i]=s;
    						for(l=i;l==n;l++)
    						{
    							vett[i+1]=vett2[l];
    						}
    					}
    					else
    					{
    						vett2[i+1]=s;
    						for(l=0;l<i;l++)
    						{
    							vett[l]=vett2[l];
    						}
    						for(l=i+1;l==n;l++)
    						{
    							vett[l]=vett2[l];
    						}
    					}
    				}
    				n++;
    			}
    			for(i=0;i<n;i++)
    			{
    				vett[i]=vett2[i];
    			}
    			for(i=0;i<n;i++)
    			{
    				somma+=vett[i];
    			}
    		}
    		for(i=0;i<n;i++)
    		{
    			printf("%i\n",vett[i]);
    		}
    		return 0;
    }

  8. #8
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Ti consiglio di separare la parte in cui ricevi i valori dalla parte in cui li ordini.
    Potresti anche utilizzare una funzione esterna,così è difficile capire cosa sbagli.

  9. #9
    Originariamente inviato da ramy89
    Ti consiglio di separare la parte in cui ricevi i valori dalla parte in cui li ordini.
    Potresti anche utilizzare una funzione esterna,così è difficile capire cosa sbagli.
    Quoto. Allora la questione funziona cosi:

    -) Definisci la dimensione massima del vettore (numero di elementi massimi che potrà contenere)

    -) Definisci il limite massimo per la somma degli elementi che andranno inseriti nel vettore (nel tuo caso 30)

    -) Chiami una funzione che inserisce gli elementi nel vettore fino a quando il vettore non è pieno o la somma degli elementi inseriti è minore o uguale a 30.

    -) Chiami un'altra funzione (una tra quelle che ti ho indicato va più che bene) per ordinare il vettore.


    Questo è un esempio in modo che tu capisca l'ordine e la suddivisione del lavoro tra più funzioni:

    codice:
    int main()
    {
    	int size;
    
    	printf( "Inserisci la dimensione massima del vettore: " );
    	scanf( "%d%*c", &size );
    
    	if( size >= 0 )
    	{
    		int limite, elementi_inseriti;
    		int *vettore = (int *) malloc( size * sizeof(int) );
    
    
    		printf( "Inserisci il limite per la somma degli elementi: " );
    		scanf( "%d%*c", &limite );
    
    
    		// Inserisce gli elementi nel vettore e torna il numero di elementi 
                    // effettivamente inseriti
    		elementi_inseriti = fill( vettore, size, limite );
    
    		// Ordina il vettore (con funzione Insertion Sort)
    		insertionSort( vettore, elementi_inseriti );
    
    		// Stampa gli elementi del vettore su video
    		print( vettore, elementi_inseriti );
    
    		free( vettore );
    	}
    
    
    	getchar();
    	return 0;
    }
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da GliderKite
    Quoto. Allora la questione funziona cosi:

    -) Definisci la dimensione massima del vettore (numero di elementi massimi che potrà contenere)

    -) Definisci il limite massimo per la somma degli elementi che andranno inseriti nel vettore (nel tuo caso 30)

    -) Chiami una funzione che inserisce gli elementi nel vettore fino a quando il vettore non è pieno o la somma degli elementi inseriti è minore o uguale a 30.

    -) Chiami un'altra funzione (una tra quelle che ti ho indicato va più che bene) per ordinare il vettore.


    Questo è un esempio in modo che tu capisca l'ordine e la suddivisione del lavoro tra più funzioni:

    codice:
    int main()
    {
    	int size;
    
    	printf( "Inserisci la dimensione massima del vettore: " );
    	scanf( "%d%*c", &size );
    
    	if( size >= 0 )
    	{
    		int limite, elementi_inseriti;
    		int *vettore = (int *) malloc( size * sizeof(int) );
    
    
    		printf( "Inserisci il limite per la somma degli elementi: " );
    		scanf( "%d%*c", &limite );
    
    
    		// Inserisce gli elementi nel vettore e torna il numero di elementi 
                    // effettivamente inseriti
    		elementi_inseriti = fill( vettore, size, limite );
    
    		// Ordina il vettore (con funzione Insertion Sort)
    		insertionSort( vettore, elementi_inseriti );
    
    		// Stampa gli elementi del vettore su video
    		print( vettore, elementi_inseriti );
    
    		free( vettore );
    	}
    
    
    	getchar();
    	return 0;
    }
    Scusami, ma perchè vettore è un puntatore ?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.