"Somma tra due array" C++

Pubblicità

V&N0M

Nuovo Utente
Messaggi
130
Reazioni
29
Punteggio
34
Buongiorno, all'universita' nel corso di programmazione del primo anno, e' da poco piu di 3 settimane che assaggio c++, avevo fatto prima solo un po di python, il prof ha assegnato questo esercizio, ovvero caricare 2 array (non in input) e dopo in un terzo array voleva inseriti i risultati delle somme dei contenuti degli indici:
esempio
A[0] = 2
B[0] = 5
C[0] = 7
si continua cosi' fino a quando finiscono gli indici.
Io ho fatto il programma solo che l'ho voluto fare mettendo gli array in input in modo da essere piu' "interattivo", il problema e' che quando sommo due array di dimensione differenti, ESEMPIO:

A[0]=5 // L'array A ha dimensione 4
A[1]=4
A[2]=2
A[3]=4

B[0]=3 //L'array B ha dimensione 3
B[1]=2
B[2]=4

C[0]=8 //L'array C ha dimesione 4
C[1]=6
C[2]=4
C[3]=2325325

A di dimensione 4 e B di dimensione 3 , in c[3] ovvero l' indice 4 stampa un numero random perche' il valore di B[3] non e' stato messo in input dalla tastiera ma gli e' stato assegnato un numero random memorizzato in memoria, per questo poi in c[3] stampa un numero a caso che e' frutto del numero random + 4 di A[3] adesso vi chiedo come risolvere questo problema perche' non so come fare, la mia idea era ad esempio in questo caso:
Se b[3] non e' stato caricato in unput e' uguale a 0, cosi' risolverei i problemi quindi nell'esempio sopra

C[3]=4 //deve essere uguale a 4 perche' sto facendo la somma di A[3] con B[3] quindi 4 + 0

, il fatto e' che non so come scrivarla questa cosa, qualcuno ha altre idee? IL prof purtroppo assegna esercizi senza mai correggerli :/
Ecco il mio codice in c++

Codice:
#include <iostream>
// somma di due array

using namespace std;

int main ()
{
    int a; //dimensione array A  
    int b; //dimensione array b
  
  
    cout << "Inserisci la dimensione dell' array A" << endl;
    cin >> a;
    cout << endl;
  
    cout << "Inserisci la dimensione dell' array B" << endl;
    cin >> b;
    cout << endl;
  
    int A[a]; //array a
    int B[b]; //array b
  
    //carica array A  
    cout << "Caricamento dell' array A di dimensione "  "'"<< a <<"'" << endl;
  
    int i = 0;
    cout << endl;
  
    while (i < a) {
      
        cout << "Inserisci il valore di A["<< i << "]: ";
        cin >> A[i];
        i++;
    }  

    cout << endl;
  
    //carica array B
    cout << "Caricamento dell' array B di dimensione " "'"<< b <<"'" << endl;
      
    i = 0;
    cout << endl;
  
    while (i < b) {
      
        cout << "Inserisci il valore di B["<< i << "]: ";
        cin >> B[i];
        i++;
    }
  
    cout << endl;
    i = 0;
  
    if (b > a) {
      
        int C[b];
        while (i < b) {
      
            C[i] = A[i] + B[i];
            cout << "Valore di C[" << i << "]: " << C[i] << endl;
            i++;
        }
    }
  
    else {
      
        int C[a];
        while (i < a) {
          
            C[i] = A[i] + B[i];
            cout << "Valore di C[" << i << "]: " << C[i] << endl;
            i++;
        }
    }
  
    system ("pause");
    return 0;
      
} // end main
 
Ciao, per fare quello che chiedi puoi inizializzare i vettori quando li dichiari, nel seguente modo: int A[a] = {0}; Facendo ciò inizializzi tutti gli elementi del vettore a zero automaticamente. I numeri random li vedi perchè quando viene risarvato lo spazio di memoria atto a contenere il vettore, in quella parte della ram erano stati allocati dei dati da qualche applicazione che non servono più.
Volendo puoi sfruttare dei cicli per assegnare uno zero a ogni elemento del vettore ma sarebbe inutile, visto che puoi direttamente inizializzare a zero i vettori quando li dichiari, evitando di scrivere linee di codice e rendendo il programma più veloce e leggibile.
 
Ultima modifica:
Buongiorno, all'universita' nel corso di programmazione del primo anno, e' da poco piu di 3 settimane che assaggio c++, avevo fatto prima solo un po di python, il prof ha assegnato questo esercizio, ovvero caricare 2 array (non in input) e dopo in un terzo array voleva inseriti i risultati delle somme dei contenuti degli indici:
esempio
A[0] = 2
B[0] = 5
C[0] = 7
si continua cosi' fino a quando finiscono gli indici.
Io ho fatto il programma solo che l'ho voluto fare mettendo gli array in input in modo da essere piu' "interattivo", il problema e' che quando sommo due array di dimensione differenti, ESEMPIO:

A[0]=5 // L'array A ha dimensione 4
A[1]=4
A[2]=2
A[3]=4

B[0]=3 //L'array B ha dimensione 3
B[1]=2
B[2]=4

C[0]=8 //L'array C ha dimesione 4
C[1]=6
C[2]=4
C[3]=2325325

A di dimensione 4 e B di dimensione 3 , in c[3] ovvero l' indice 4 stampa un numero random perche' il valore di B[3] non e' stato messo in input dalla tastiera ma gli e' stato assegnato un numero random memorizzato in memoria, per questo poi in c[3] stampa un numero a caso che e' frutto del numero random + 4 di A[3] adesso vi chiedo come risolvere questo problema perche' non so come fare, la mia idea era ad esempio in questo caso:
Se b[3] non e' stato caricato in unput e' uguale a 0, cosi' risolverei i problemi quindi nell'esempio sopra

C[3]=4 //deve essere uguale a 4 perche' sto facendo la somma di A[3] con B[3] quindi 4 + 0

, il fatto e' che non so come scrivarla questa cosa, qualcuno ha altre idee? IL prof purtroppo assegna esercizi senza mai correggerli :/

Ti consiglio di scrivere il codice in maniera meno confusionale e comunque per la proprieta delle matrici, 2 matrici con riga e colonna diverse non possono essere addizionate. Un altra cosa scrivere i commenti nel codice è ok, ma solo nelle parti necessarie, è inutile scrivere
int a; // inizializzo variabile a è scontato come cosa
commentare ogni riga rende il codice illegibile e poco scorrevole

Ecco il mio codice in c++:
https://ideone.com/M9hgdg

Riguardo alla riallocazione degli array, penso che tu abbia un pò di confusione su come funziona gli array in c++/c. Gli array sono statici non dinamici, puoi riallocarli dinamicamente o usare new[] per crearne uno nuovo, ma poi va tenuto conto della dimensione, metti caso che inserisco un miliardo?. In c++ hanno introdotto vector apposta per questo. Quello che ti consiglio ora è di lascar perdere queste cose e continuare con il programma del tuo docente, altrimenti ti confonderai come pochi.

Ecco un esempio di quello che volevi fare te, guardalo una volta e poi scordatelo, perchè è un implementazione fatta in maniera orrenda, era solo una dimostrazione veloce e non ho neanche usato delete[] arr; :popo:

Codice:
#include <iostream>
#include <new>
using namespace std;
int main ()
{
 
  int arr_1[4] = {5,8,3,2};
  int arr_2[2] = {2,1};
 
  if(sizeof(arr_1) != sizeof(arr_2)){
 
    int *arr;
    int dim = 4;
 
    arr = new (nothrow) int[dim];
    if (arr == nullptr)
      cout << "Errore: Non e' possibile effettuare l'allocazione";
    else {
      for (int n=0; n<dim; n++) {
          arr[n] = arr_2[n];
           if(n > 1){
          arr[n] = 0;
         }
        cout << arr[n] << endl;
      }
   
    }
  }
 
  return 0;
}
 
Ultima modifica:
Matematicamente parlando, la somma tra matrici è possibile solo se hanno le stesse dimensioni;
a parte questo puoi fare un cosa banalissima:
il ciclo addizionatore lo fai per la dimensione minima tra le 2 matrici (così se una ha dim. 3 ed una 7 sommi da c[0]=a[0]+b[0] a c[2]=a[2]+b[2], mentre il resto degli elementi è c[j]=b[j] senza sommare, dove b è la matrice più "lunga"),
in alternativa la somma si fa solo sul minimo delle lunghezze (e così si dimensiona l'array somma)
 
Ultima modifica:
la cosa più facile da fare e' dimensionare il vettore somma pari alla dimensione più' grande dei vettore di dati, dopodiché fare un loop pari a questo numero, ma addizionare solo i vettori la cui dimensione e' maggiore all'indice.
La lunghezza degli array la sai già, ma nel caso generico non la sapessi puoi usare sizeof diviso la dimensione dei dati dell'array (poiché sizeof ritorna la dimensione totale in byte). Oppure puoi usare un vector invece di un array, il cui metodo 'size' ritorna il numero degli elementi.
Come al solito ci sono mille e una soluzione diverse :)
 
Pubblicità
Pubblicità
Indietro
Top