Descrivere un algoritmo codificato in linguaggio C/C+

di il
5 risposte

Descrivere un algoritmo codificato in linguaggio C/C+

Buongiorno sto riscontrando problemi nella risoluzione di questo algoritmo
Descrivere un algoritmo codificato in linguaggio C/C++ che:
1. definisce la funzione sediversi con parametri:
• a di tipo vettore di 100 int;
• b di tipo vettore di 100 int;
• d di tipo int;
• c di tipo puntatore/riferimento ad un int;
Per ogni posizione k del vettore a, se a[k] è diverso da tutti gli elementi del vettore a tra le posizioni k e k+d (escludendo a[k]), la funzione deve scrivere a[k] nel vettore b. Inoltre la funzione deve scrivere nell’area di memoria puntata/riferita da c il numero di elementi del vettore a copiati nel vettore b.
ATTENZIONE!!! d potrebbe essere un numero negativo.
ATTENZIONE!!! Le posizioni oltre la dimensione del vettore non vanno considerate.
Ad esempio, se d ha valore -3 e il vettore a è il seguente:
2 3 2 1 4 2 1 3 0 8
alla fine dell’esecuzione il vettore b conterrà
2 3 1 4 3 0 8
e l’area di memoria puntata/riferita da c conterrà il valore 7.
2. nella funzione main
I. dichiarare un vettore di nome x di 100 int e un vettore di nome y di 100 int;
II. dichiarare due variabili h e k di tipo int;
III. inserire un valore letto da standard input nella variabile h;
IV. ripetere le seguenti operazioni che devono terminare quando, dopo l’esecuzione della funzione sediversi, i vettori x e y contengono gli stessi valori:
a. inserire (uno per ogni posizione) 100 valori letti da standard input nel vettore x;
b. eseguire la funzione sediversi applicata al vettore x e al valore contenuto nella variabile h inserendo il risultato nel vettore y e nella variabile k.


Non ho problemi a risolvere il main in quanto banale, quindi sto cercando di risolvere la funzione che ho messo nel main per verificare se il risultato è corretto riguardo all'esempio fornito dal prof

5 Risposte

  • Re: Descrivere un algoritmo codificato in linguaggio C/C+

    Allego anche il mio tentativo.
    So che dovrei distinguere i casi in cui d sia minore e maggiore di 0, ma per iniziare lo sto risolvendo solo per d <0 come nell'esempio.
    Il problema principale è che io rendo a[k] diverso da solo il valore a[k+d] e non ogni valore compreso tra k(escluso) e k+d; immagino che servirebbe probabilmente un altro ciclo for ma li ho provati tutti e non riesco ad uscirne, grazie per l'aiuto in anticipo.
    
    #include <iostream>
    #define D1 10
    using namespace std;
    
    int main()
    {
        int a[D1],b[D1],d,c,k,cont=0;
        for(k=0;k<D1;k++)
        {
            cin>>a[k];
        }
        cout<<"dammi un valore per d"<<endl;
        cin>>d;
        
        for(k=0;k<D1;k++)
        {
            if(a[k]!=a[k+d])
            {
                b[k]=a[k];
                cont++;
                
                }
        }
        c=cont;
        cout<<b[k];
        return 0;
        
    }
  • Re: Descrivere un algoritmo codificato in linguaggio C/C+

    Intanto posta il codice tra tag CODE
  • Re: Descrivere un algoritmo codificato in linguaggio C/C+

    Ok fatto scusate
  • Re: Descrivere un algoritmo codificato in linguaggio C/C+

    Poi, per le tue prove, ti consiglio di non chiedere in input i valori ogni volta, ma di scrivere
    
    	int a[D1] = {2,3,2,1,4,2,1,3,0,8};
    	int b[D1];
    	int d =-3;
    	int c=0;
    
    e continuare direttamente con il codice che avrà la tua funzione.

    Infine, dopo il primo ciclo (in cui esaminerai ogni a[k]) con
    
    for(k=0;k<D1;k++)
    
    ti consiglio di impostare un altro ciclo, che dovrà andare da un minimo ad un massimo.
    Troverai questo minimo e massimo sommando d a k, ad esempio

    v1=k+d;

    Se v1 sarà minore di k, allora sarà il minimo e k il massimo, altrimenti sarà al contrario.
    Se v1 sarà il minimo non dovrà essere minore di 0 (altrimenti lo imposterai a 0); se sarà il massimo non dovrà essere maggiore di (D1-1) altrimenti lo imposterai a (D1-1). Potrai impostare il ciclo con un contatore w che andrà dal minimo al massimo e confronterai a[k] con a[w] ...

    Continuerai tu ...
  • Re: Descrivere un algoritmo codificato in linguaggio C/C+

    Perfetto grazie, almeno così non devo inserire i valori ogni volta da standard input. Penso di avere capito come fare, grazie mille.
Devi accedere o registrarti per scrivere nel forum
5 risposte