Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C]Array puntatore

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24

    [C]Array puntatore

    codice:
    #include <stdio.h>#include <stdlib.h>
    
    
    #define dim 100
    
    
    int inserisci(int []);
    void visualizza(int [], int);
    void bubblesort(int [], int);
    
    
    int main(void){
    	
    	int n;
    	int i;
    	int vett[dim];
    	int a;
    	int scl;
    	int ord;
    	int elem;
    	int num;
    	
    	do{
    		printf("--------------------\n");
    		printf("1)Inserisci l'array\n");
    		printf("2)Modifica un elemento dell'array\n");
    		printf("3)Ordina col metodo bubblesort\n");
    		printf("4)Ricerca binaria di un elemento\n");
    		printf("5)Visualizza L'array\n");
    		printf("0)Esci\n");
    		
    		scanf("%d" ,&scl);
    		
    		if(scl < 0 || scl > 5)
    			printf("hai inserito dei valori invalidi\n");
    		
    		switch(scl){
    			case 1:
    			
    				n=inserisci(vett);
    			
    			break;
    			
    			case 2:
    				
    				do{
    				
    				visualizza(vett, n);
    				
    				printf("---------------------------------------------\n");
    				printf("vuoi ordinare l'array in maniera crescente?\n");
    				printf("1)si\n");
    				printf("2)no,voglio modificare un elemento inserito\n");
    				printf("3)torna al menù precedente \n");
    				
    				scanf("%d" ,&ord);
    				
    				if(ord <= 0 || ord > 3){
    					printf("errore hai inserito dei valori invalidi\n");
    				}
    					
    					switch(ord){
    						
    						case 1:
    						
    						bubblesort(vett, n);	
    						
    						break;
    						
    						case 2:
    						
    						printf("quale elemento vuoi modificare?\n");
    						scanf("%d" ,&elem);
    						
    						printf("che valore vuoi inserire\n?");
    						scanf("%d" ,&num);
    						
    						for(i=0; i<elem; i++){
    							if(vett == elem)
    							{
    								*(vett)=elem;
    							}
    						}
    					}
    				}while(ord != 3);
    				
    				
    			break;
    			
    			case 5:
    			
    				visualizza(vett, n);
    			
    			break;
    		}
    		
    	}while(n != 0);	
    }
    
    
    
    
    int inserisci(int vett[])
    {
    	int i,n;
    	
    	printf("quanti elementi vuoi inserire?\n");
    	scanf("%d" ,&n);
    	
    	if(n <= 0){
    		printf("errore, hai inserito un valore nullo o inferiore a zero\n");
    	  }
    	  
    	  if(n > dim){
    		  printf("errore, hai superato il limite di oggetti da inserire: il massimo e' %d\n" ,dim);
    	}
    	else{
    		for(i=0; i<n; i++){
    			printf("inserisci l'elemento %d:\n" ,i+1);
    			scanf("%d" ,&vett[i]);
    		}
    	}
    	
    	return n;
    }
    
    
    void visualizza(int vett[], int n)
    {
    	int i;
    	
    	for(i=0 ; i<n; i++){
    		printf("Elemento:%d ---- Valore:%d\n" ,i+1, vett[i]);
    	}
    }
    
    
    void bubblesort(int vett[], int n)
    {
    	int i, tmp, j;
    	
    	for(i=0; i<n; i++){
    		for(j=0; j<n-i-1; j++){
    			if(vett[j]>vett[j+1]){
    				tmp=vett[j];
    				vett[j]=vett[j+1];
    				vett[j+1]=tmp;
    			}
    		}
    	}
    }
    allora il problema (principale , so che ancora si deve aggiustare molto ) si trova esattamente in queste righe ( ho postato il codice completo per scrupolo

    codice:
    	case 2:						
    						printf("quale elemento vuoi modificare?\n");
    						scanf("%d" ,&elem);
    						
    						printf("che valore vuoi inserire\n?");
    						scanf("%d" ,&num);
    						
    						for(i=0; i<elem; i++){
    							if(vett == elem)
    							{
    								*(vett)=elem;
    							}
    						}
    					}
    La mia intenzione era quella di poter modificare l'elemento x dell'array, di un array di cui si può decidere la grandezza, ma con un massimo di x spazi.

    per essere più chiari:

    -----------------------------------------------------

    Dico che voglio inserire 30 valori

    poi li ordino

    se io volessi cambiare solo il 29esimo elemento che dovrei fare ?

    Anzi cosa sbaglio ?

    ---------------------------------------------------
    per ora posso utilizzare solo pointer array, e tutti i cicli ( while, for, do etc. ) non posso usare le struct o le liste.

    qualcuno potrebbe spiegarmi dove sbaglio ?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A che serve quel ciclo for? E che fine ha fatto num che è il valore da assegnare?

    Se hai l'indice dell'elemento in elem e il valore in num, assegnalo semplicemente con

    *(vett+elem) = num;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24
    Quote Originariamente inviata da oregon Visualizza il messaggio
    A che serve quel ciclo for? E che fine ha fatto num che è il valore da assegnare?

    Se hai l'indice dell'elemento in elem e il valore in num, assegnalo semplicemente con

    *(vett+elem) = num;
    Allora ho appena modificato il codice così, ma ugualmente non funge ( non cambia effettivamente l'elemento )

    il ciclo for io lo utilizzavo per scandire l'array ed arrivare all'elemento che volevo cambiare ( ma da come lo dici credo che avrò sbagliato )
    codice:
                            case 2:
                            
                            printf("quale elemento vuoi modificare?\n");
                            scanf("%d" ,&elem);
                            
                            printf("che valore vuoi inserire\n?");
                            scanf("%d" ,&num);
                            
                            for(i=0; i<elem; i++){
                                if(*(vett) == elem)
                                {
                                    *(vett+elem)=num;
                                }
                            }
                        }
    Ultima modifica di legeo88; 23-02-2014 a 19:35

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24
    Ce l'ho fatta grazie oregon per la dritta, che mi ha dato il mini mini mini mini lampo di " genio

    ho modificato così e ora funziona !

    codice:
    						case 2:
    						
    						printf("quale elemento vuoi modificare?\n");
    						scanf("%d" ,&elem);
    						
    						printf("che valore vuoi inserire\n?");
    						scanf("%d" ,&num);
    						
    							
    							
    								*(vett+elem-1)=num;
    							
    						}

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Confermo che il for non c'entra nulla ... non si cerca un elemento se hai l'indice. E l'indice è in base 0, quindi è ovvio che se con 1 intendi il primo devi sottrarre 1.

    Ma poi perché, più semplicemente, non scrivi

    vett[elem-1]=num;

    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24
    Perchè l'esercizio diceva esplicitamente di usare i puntatori :|

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.