Esercizio c++

di il
8 risposte

Esercizio c++

Ciao! Ho svolto questo esercizio, qualcuno saprebbe dirmi se è giusto? che ho visto una soluzione un tantino diversa

Esercizio 1 (9 punti)
Scrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione Compresi con parametri:
• a di tipo vettore di 500 int;
• b di tipo vettore di 500 int;
• d di tipo puntatore/riferimento ad un int.
Scrivere nell’area di memoria puntata/riferita da d la posizione di un qualsiasi elemento del vettore a compreso (estremi inclusi) tra almeno due elementi del vettore b. Se tale elemento non esiste, la funzione deve scrivere nell’area di memoria puntata/riferita da d il numero -1.
2. nella funzione main
I. dichiara due vettori x e z di 500 int.
II. dichiara una variabile t di tipo int;
III. inserisce in tutte le posizioni del vettore x dei numeri interi letti da standard input.
IV. ripete le seguenti istruzioni che devono terminare quando l’esecuzione della funzione Compresi () inserisce nella variabile t il valore -1:
a. inserisce in tutte le posizioni del vettore z dei numeri interi letti da standard input.
b. eseguire la funzione Compresi () applicata al vettore x al vettore z inserendo il risultato nella variabile t;
#include <iostream>
using namespace std;

void compresi(int a[500], int b[500], int &d)
{
	int i;
	int j=0;
	int conta=0;

	for (i = 0; i < 500; i++)
	{
		if (a[i] <= b[j] && a[i] >= b[j])
		{
			d = i;
			j++;
			conta++;
		}

	}
	if (conta == 0)
	{
		d = -1;
	}
}
int main()
{
	int x[500], z[500];
	int i, t;

	for (i = 0; i < 500; i++)
	{
		cin >> x[i];
	}
	do{
		for (i = 0; i < 500; i++)
		{
			cin >> z[i];
		}
		compresi(x, z, t);
	} while (t != -1);

	return 0; }
Grazie!

8 Risposte

  • Re: Esercizio c++

    Complimenti al tuo prof per la sua fervida immaginazione!

    Scherzi a parte, secondo il mio modesto parare quella traccia si presta a varie chiavi di lettura... a scanso di equivoci dicci qual è la tua interpretazione e facci un esempio pratico con 2 vettori di 10 elementi (sarebbe crudele pretenderne 500)!

    P.S.
    Quando dici di aver "visto una soluzione un tantino diversa", intendi la soluzione del prof? In tal caso può essere utile dargli un'occhiata per capire cosa realmente intendesse con quella enigmatica traccia!
  • Re: Esercizio c++

    Questi sono temi d'esame
    Comunque io avevo pensato a questo
    vettore a: 1234567898
    vettore b: 1333333333

    dato che 2 è compreso tra 1 e 3 d=1 che è la posizione dove si trova.. io ho capito di fare così, dici che sia giusto?

    Il prof invece nella sua soluzione cerca anche i max e i min del vettore, ma non capisco il senso dato che non è detto che un valore sia per forza compreso tra un valore max e min
  • Re: Esercizio c++

    Quello che hai scritto non è corretto. E' invece corretto ottenere minimo e massimo e confrontare i valori del primo vettore con questi valori.

    Utilizzando sempre b[j] tu non controlli mai se un elemento del primo vettore è compreso tra quelli del secondo.

    Devo aggiungere che non mi sembrano esercizi tanto "fantasiosi" o "difficoltosi" e fra l'altro mi sembra comunque che non ci sia molto da interpretare.
  • Re: Esercizio c++

    oregon ha scritto:


    Quello che hai scritto non è corretto. E' invece corretto ottenere minimo e massimo e confrontare i valori del primo vettore con questi valori.

    Utilizzando sempre b[j] tu non controlli mai se un elemento del primo vettore è compreso tra quelli del secondo.

    Devo aggiungere che non mi sembrano esercizi tanto "fantasiosi" o "difficoltosi" e fra l'altro mi sembra comunque che non ci sia molto da interpretare.
    Non ho capito a cosa mi servono min e max? Potresti farmi un esempio?
  • Re: Esercizio c++

    Non c'è esempio da fare, devi solo ragionare.

    Un qualsiasi elemento di a deve essere compreso tra due qualsiasi elementi di b (cosa che tu non fai nel codice perché non usi mai due elementi di b). Detto questo, non ha senso confrontare ogni elemento di a con ogni coppia di b dato che puoi ottenere lo stesso risultato confrontando ogni elemento di a con il min/max di b.

    Se b ha come elementi

    1 5 2 20 13

    e il primo elemento di a da confrontare è 17, cosa fai? Non ha senso confrontare

    17 con 1 5
    17 con 1 2
    17 con 2 5
    ...

    La cosa sensata è prendere il minimo e il massimo e usarli come intervallo che valida il confronto. Quindi troverai 1 e 20 e confronterai

    17 con l'intervallo 1-20

    Chiaro?
  • Re: Esercizio c++

    oregon ha scritto:


    Non c'è esempio da fare, devi solo ragionare.

    Un qualsiasi elemento di a deve essere compreso tra due qualsiasi elementi di b (cosa che tu non fai nel codice perché non usi mai due elementi di b). Detto questo, non ha senso confrontare ogni elemento di a con ogni coppia di b dato che puoi ottenere lo stesso risultato confrontando ogni elemento di a con il min/max di b.

    Se b ha come elementi

    1 5 2 20 13

    e il primo elemento di a da confrontare è 17, cosa fai? Non ha senso confrontare

    17 con 1 5
    17 con 1 2
    17 con 2 5
    ...

    La cosa sensata è prendere il minimo e il massimo e usarli come intervallo che valida il confronto. Quindi troverai 1 e 20 e confronterai

    17 con l'intervallo 1-20

    Chiaro?
    Ah si ho capito!
    Una domanda (spero di non dire una cavolata) se io facessi if (a <= b[j] && a >= b[k]), sarebbe un'operazione inutile andare a vedere ogni coppia (come hai detto tu), però non sarebbe sbagliato,giusto?
  • Re: Esercizio c++

    Ma non la fai semplicemente, considera quante coppie ci sono con 500 elementi ... diventerebbe lunghissima da eseguire e assurda. Teoricamente possibile ma praticamente sbagliatissima.
    Dato che l'intenzione del prof è quella di farvi arrivare alla soluzione realistica non ti consiglio di suggerire quella di esaminare tutte le coppie se vuoi superare l'esame.
  • Re: Esercizio c++

    oregon ha scritto:


    Ma non la fai semplicemente, considera quante coppie ci sono con 500 elementi ... diventerebbe lunghissima da eseguire e assurda. Teoricamente possibile ma praticamente sbagliatissima.
    Dato che l'intenzione del prof è quella di farvi arrivare alla soluzione realistica non ti consiglio di suggerire quella di esaminare tutte le coppie se vuoi superare l'esame.
    Ok grazie mille
    Potrei chiederti,anche, un chiarimento su un errore che mi compare su visual studio?
Devi accedere o registrarti per scrivere nel forum
8 risposte