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

    Problemi ritorno di un array dopo chiamata della funzione

    Ciao a tutti, sono nuovo di questo forum.
    Devo sostenere un esame all'università di Informatica e non essendo il mio campo di studio la conoscenza del linguaggio C++ è base.
    Non riesco nei vari esercizi a modificare un array dopo una chiamata di una funzione.
    NB: il professore se nel testo riguardante la Funzione (in questo caso InParte) non vi è la parola RITORNARE la funzione è di tipo void.
    Grazie in anticipo a quelli che mi risponderanno dandomi una mano sono veramente in crisi
    TESTO:
    Scrivere un algoritmo codificato in linguaggio C/C++ che:


    1. definisce la funzione InParte con parametri:
      • a di tipo vettore di 5 int;
      • b di tipo vettore di 5 int;
      • c di tipo puntatore/riferimento ad un int.


    La funzione deve copiare il primo valore del vettore a nel primo posto del vettore b e per ogni valore x del vettore a successivo al primo, la funzione deve copiare x nel vettore b solo se x minore di tutti gli elementi del vettore a già copiati nel vettore b. La funzione deve inoltre scrivere nell’area di memoria puntata/riferita da c la posizione del più piccolo valore copiato nel vettore b.


    1. nella funzione main
      1. dichiara due vettori x e y di 5 int.
      2. dichiara una variabile n di tipo int;
      3. ripete le seguenti istruzioni fino a quando l’esecuzione della funzione InParte() inserisce nella variabile n il valore 0:


    a. riempire il vettore x con valori letti da standard input;
    b. eseguire la funzione InParte () applicata al vettore x inserendo i risultati nel vettore y e nella variabile n;

    CODICE:
    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    void InParte (int a[], int b[], int &c)
    {int i=0, k=0, min, conta=0;


    b[0]=a[0];
    for(k=0; k<5; k++){for(i=1; i<5; i++){if(a[i]<b[k]){b[k]=a[i];}}}
    min=b[0];
    for(k=0; k<5; k++){if(b[k]<min){min=b[k]; conta++;}}
    c=conta;
    }
    int main()
    {int x[5], y[5], n, i=0, ris, k=0;


    do{
    cout<<"carica vettore x:"<<endl;
    for(i=0; i<5; i++){cin>>x[i];}
    InParte (x, y, ris);
    n=ris;
    cout<<"n: "<<n<<endl;
    for(k=0; k<5; k++){cout<<y[k]<<endl;}
    }
    while(n!=0);

    system("pause");
    return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ho modificato un po la tua funzione, ho aggiunto una variabile bool flag, e un altra variabile int contatore j.

    Il programma funziona cosi, per ogni elemento dell'array a[] scorre gli elementi inseriti nell'array b[], se a[i] è maggiore di uno degli elementi di b[] flag diviene false, e non esegue l'inserimento in b[], altrimenti viene inserito in b[].

    Ho commentato un po la funzione dovresti riuscire a capire come funziona



    codice:
    #include<stdlib.h>
    #include<iostream>
    using namespace std;
    void InParte(int a[], int b[], int &c)
    {
    	int i = 0, j = 0, k = 1, min, conta = 0;
    	bool flag = true;
    
    
    	b[0] = a[0];
    	min = b[0];
    	for (i = 1; i<5; i++) { // Per tutti gli elementi dell'array a[]
    		flag = true;
    		// Scorro tutti gli elementi dell'array b[]
    		for (j = 0; j<k; j++) {// Per gli elementi inseriti nell'array b[] di volta in volta crescente
    
    
    			if (a[i]>b[j]) {//Se l'elemento di a[] è maggiore degli elementi di b[]
    
    
    				flag = false; // disabilito l'inserimento
    				break;
    			}
    		}
    		if (flag) {// Se l'elemento è minore di tutti gli elementi di b[]
    			b[k++] = a[i];
    			min = a[i];
    		}
    	}
    
    
    	c = min;
    }
    
    
    
    
    
    
    
    
    int main()
    {
    	int x[5] = { 0 }, y[5] = { 0 }, n, i = 0, ris, k = 0;
    
    
    
    
    	do {
    		cout << "carica vettore x: \n" ;
    		for (i = 0; i < 5; i++) { cout<< "-> "; cin >> x[i]; }
    		InParte(x, y, ris);
    		n = ris;
    		cout << "n: " << n << endl;
    		for (k = 0; k<5; k++) { cout << y[k] << endl; }
    	} while (n != 0);
    
    
    	system("pause");
    	return 0;
    }
    Tecnologia

Tag per questa discussione

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.