RISOLTO [C++] Due esercizi da risolvere entro stasera

Stato
Discussione chiusa ad ulteriori risposte.

MPG

Utente Attivo
Ho due esercizi da risolvere entro stasera in funzione della verifica di domani per cui vi prego se mi potete correggere il primo e aiutare a svolgere il secondo (nessuno dei miei compagni riesce a svolgere il secondo).
1) Scrivere una funzione che riceva come parametro un array di interi, (la sua dimensione) e un intero x e restituisca la posizione di x nell'array. Se l'elemento non è presente la funzione restituisce -1.

Codice:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>

using namespace std;

int CercaEl(int A[],int dim,int x)
{
 for(int i=0;i<dim;i++)
 {
        if(A[x]==A[i])
    return i;
 }
 return -1;

}
int main()
{
int dimensione;
cin>>dimensione;
int a[dimensione];
int posizione;
cin>>posizione;
cout<<CercaEl(a,dimensione,posizione);
return 0;
}
Va bene?

2) una funzione riceve come parametri 2 array di uguale dimensione e la dimensione. Sampa e restituisce il numero di elementi in comune.
????????
 

Ibernato

Utente Èlite
3,816
1,707
Hardware Utente
Sistema Operativo
Windows 10 Pro
Ho due esercizi da risolvere entro stasera in funzione della verifica di domani per cui vi prego se mi potete correggere il primo e aiutare a svolgere il secondo (nessuno dei miei compagni riesce a svolgere il secondo).
1) Scrivere una funzione che riceva come parametro un array di interi, (la sua dimensione) e un intero x e restituisca la posizione di x nell'array. Se l'elemento non è presente la funzione restituisce -1.

Codice:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>

using namespace std;

int CercaEl(int A[],int dim,int x)
{
for(int i=0;i<dim;i++)
{
        if(A[x]==A[i])
    return i;
}
return -1;

}
int main()
{
int dimensione;
cin>>dimensione;
int a[dimensione];
int posizione;
cin>>posizione;
cout<<CercaEl(a,dimensione,posizione);
return 0;
}
Va bene?

2) una funzione riceve come parametri 2 array di uguale dimensione e la dimensione. Sampa e restituisce il numero di elementi in comune.
????????
Conosco c++ ma non ho mai programmato con questo linguaggio (ma alla fine il procedimento è uguale per tutti i linguaggi).
La prima funzione va bene. In sostanza devi scorrere l'intero Array e confrontare valore per valore. Sembra ok. Ti funziona?
La seconda funzione è facilissima.
Hai due Array di uguali dimensioni.
Ti servono due for innestati.
Dal cellulare mi è difficile scrivere il codice. Te lo scrivo in c e tu lo traduci in c++
For(i=0; i<dim;i++){
For(j=0;j<dim;j++){
if(ai==b[j]) printef("%d",ai);
}
}
Dal cellulare mi da problemi il codice ai sarebbe a[]
 

MPG

Utente Attivo
Aggiorno il primo ho rifatto cosi'

Codice:
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <iostream>

using namespace std;




int CercaEl(int A[],int dim,int x)
{

 for(int i=0;i<dim;i++)
 {
        if(x==A[i])
        {
          return i;

        }



}
return -1;
}

int main()
{
    srand(time(NULL));
int dim;
cin>>dim;
int A[dim];
int x;
cin>>x;
 for(int i=0; i<dim;i++ )
{
       cin>>A[i];
      cout<<endl;
}
cout<<CercaEl(A,dim,x);
return 0;
}
Post automaticamente unito:

il secondo:

Codice:
#include <iostream>

using namespace std;



int ElComune(int A[],int B[], int dim)
{
    int conta=0;
    for(int i=0;i<dim;i++)
    {
        for(int j=0;j<dim;j++)
        {
        if(A[i]==B[j])
        conta++;
        }
    }
        return conta;
}
int main()
{
    int dim;
    cin>>dim;
    int A[dim];
    int B[dim];
    for(int i=0;i<dim;i++)
    {
        cin>>A[i];
        cout<<endl;

    }
    for(int j=0;j<dim;j++)
    {
        cin>>B[j];
        cout<<endl;
    }
    cout<<ElComune(A,B,dim);


}
 
Ultima modifica:

pabloski

Utente Èlite
1,914
353
Hardware Utente
Sono fatti bene adesso. Tuttavia sul secondo c'e' un dubbio non da poco. Se per esempio ho

A = [1,2,3,4,1,5,6,7]
B = [1,2,3,4,5,6,7,8]

Siccome 1 c'e' due volte in A, lui me lo conta come 2 occorrenze. Ma la traccia potrebbe voler dire che gli interessi il numero di cooccorrenze dell'oggetto, cioe' del simbolo 1. Cioe' quei due 1 in A dovrebbero essere valutati una sola volta. In questo caso saresti costretto per prima cosa a fare il pruning delle due matrici, eliminando gli elementi duplicati in ognuna di esse.
 

_Achille

Utente Èlite
2,992
684
Hardware Utente
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
Hard Disk
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
Scheda Video
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
Alimentatore
RM550X
Case
NZXT S340
Periferiche
Cooler Master XT; Razer Abyssus
Sistema Operativo
Windows 10 Pro
Comunque se vuoi sorprendere il tuo prof. puoi implementare una ricerca binaria (o dicotomica).
Altrimenti ti consiglio di chiamare la funzione che hai già scritto tu (quella che confronta da inizio a fine array) int ricercaLineare(const int*, int, int) per il futuro.
 

Eduadie

Nuovo Utente
In effetti si la tua seconda traccia potrebbe andar bene per come l'hai scritta ma ovviamente c'è il caso che ti è stato detto che andrebbe gestito in altro modo. Quindi se a te basta come l'hai scritta tu ok, altrimenti va cambiato come ti è stato suggerito cioè riscrivere gli array senza doppioni e applicare la procedura.
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando