PDA

Visualizza la versione completa : aiuto per programmini in c/c++


RikyToro
28-12-2008, 16:06
chiedo un aiuto su alcuni programmini che avevo da fare..in fase di compilazione non viene segnalato nessun errore..ma poi non fanno quello che vorrei..questi sono i testi e i codici che ho scritto..se riuscite a capire dove ho sbagliato mi fate un piacere..grazie


1) (a) realizzare una funzione di nome diff che, presi tre array di interi A, B, C e le dimensioni n ed m di A e B calcola C=A/B(differenza insiemistica tra A e B: C contiene tutti e soli gli elementi che appartengono ad A e non a B).la funzione restituisce come suo risultato il numero di elementi contenuti in C.
(b)realizzare un programma principale che legge due sequenze di numeri interi (di lunghezza max 100),terminate da un numero negativo, le memorizza in due array e quindi tramite la funzione diff calcola la differenza insiemistica tra i due insiemi di elementi e la stampa su std output.

Questo il mio codice:


#include <iostream>
using namespace std;
int const dim=100;
int diff(int A[],int n,int B[],int m,int C[])
{int x=0;//dimensione di C
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(A[i]!=B[j])x++;
return x;
}
int main()
{int A[dim];
int B[dim];
int x;
int C[x];
cout<<"inserisci la prima sequenza terminata da numero negativo(max 100 numeri)"<<endl;
for(int i=0;i<dim & A[i]>=0;i++)
cin>>A[i];
cout<<"inserisci la seconda sequenza terminata da numero negativo(max 100 numeri)"<<endl;
for(int j=0;j<dim & B[j]>=0;j++)
cin>>B[j];
x=diff(A,dim,B,dim,C);
cout<<x;
return 0;
}

2) (a) Sia S il tipo di una struttura dati struct costituita da un campo c1 di tipo stringa (dim max 1000) ed un campo c2 di tipo intero contenente la lunghezza della stringa in c1. Scrivere una funzione void di nome aggiorna che, presi come suoi parametri una struttura A di tipo S ed una stringa s, modifica la struttura A concatenando la stringa s alla stringa contenuta nel campo c1 di A ed aggiorna il campo c2 di A sommandovi la lunghezza della stringa s.
(b)realizzare un programma principale di prova che legge da std input due stringhe di lunghezza max 80, terminate da “a capo”,memorizza la prima stringa insieme alla sua lunghezza in una struttura di tipo S e quindi richiama la funzione aggiorna passandole la struttura creata e la seconda stringa letta. Il programma termina stampando su std output i valori dei campi c1 e c2 della struttura passata alla aggiorna.
N.B utilizzare solo stringhe tipo C(=array di caratteri)

Questo il mio codice:


#include <iostream>
#include <cstring>
using namespace std;
int const dim=1000;
int const dim_max=80;
struct S{char c1[dim];
int c2;//lunghezza della stringa
};
void aggiorna(S A,char s[])
{int x;//lunghezza di s
strcpy(A.c1,strcat(A.c1,s));
A.c2=A.c2+x;
return;
}
int main()
{S A;
char s[dim_max];
int x;
cout<<"inserisci la prima stringa(max 80 caratteri)"<<endl;
cin.getline(A.c1,dim_max);
A.c2=strlen(A.c1);
cout<<"inserisci la seconda stringa(max 80 caratteri)"<<endl;
cin.getline(s,dim_max);
x=strlen(s);
aggiorna(A,s);
cout<<A.c1<<endl;
cout<<A.c2<<endl;
return 0;
}

Cell
28-12-2008, 23:33
Per ora ho visto il primo.
Innanzitutto ci sono errori nel main. Nei cicli in cui leggi, tu controlli l'elemento, ad es., A[i] ad inizio ciclo, ma il valore di tale elemento definito solo dopo, all'interno del ciclo. Potresti, ad es. usare un do-while (o volendo pure col for si pu fare, ma con i dovuti accorgimenti).

Altra cosa, inutile passare nella funzione le dimensioni. A parte che dim una costante globale (quindi visibile anche per la funzione), ma a parte questo chi scrive la funzione si aspetta comunque che siano stati passati degli array che terminano con un numero negativo e basarti su questo.

Inoltre, non so se te ne sei accorto, ma all'interno della tua funzione l'array C (che dovrebbe essere il parametro di uscita) non proprio toccato. :oVVoVe:

I miei consigli:
- Ragiona pian piano sulle singole cose e non scrivere il codice tutto di un sol colpo. Comincia prima a vedere se sai fare una lettura da tastiera verso array e la stampa dell'array sullo schermo (che sono basilari).
- Pensa bene a quali sono gli input e gli output della tua funzione, prima ancora di pensare all'algoritmo.
- Cerca di capire, anche ragionando con carta e penna, come deve funzionare l'algoritmo (anche se non necessario, magari puoi aiutarti anche con delle ulteriori sottofunzioni).

Spero che almeno per questo esercizio le cose ti siano pi chiare. :)

Loading