Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Ciao a tutti!Sono Sara e mi sono avvicinata da poco tempo al C
Insieme al mio gruppo universitario ho dovuto creare un programma statistico in C che mi permetta di effettuare combinazioni di n valori in k gruppi
Per quanto riguarda le combinazioni dopo un pò di fatica sono riuscita a trovare un algoritmo da adattare al mio codice. Ora sono davanti a un problema: il programma mi stampa le combinazioni mentre a me serve non che le stampi, ma che le inserisca in un array a parte su cui poi continuare a lavorare...qualcuno può aiutarmi?
Posto qui sotto il mio codice.
-----------------------------------------------------------------------------
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
int valorec[MAXNC], valoref[MAXNF], i, nc, nf;
int valoritot[MAXR];
/*Presentazione del programma*/
printf("Gentile utente \n");
printf("Questo e' un Test di permutazione applicabile a grandi campioni \n");
printf("Questo programma vi consentira'di valutare eventuali effetti del vostro farmaco\n");
printf("su un gruppo di individui in analisi rispetto a un gruppo di controllo\n");
printf("\n\n\n");
do {
printf("\n inserire il numero di individui del gruppo di controllo: \n");
scanf("%d", &nc);
}
while(nc<1 || nc>600);
do
{
printf("\n inserire il numero di individui del gruppo di analisi del farmaco: \n");
scanf("%d", &nf);
}
while(nf<1 || nf>600);
printf("\n inserire i valori ottenuti da %d individui del gruppo di controllo \n", nc);
/*array di immissione dei valori ottenuti nel gruppo di controllo*/
for(i=0; i<nc; i++) {
printf("valore %d individuo: ", i+1);
scanf("%d", &valorec);
}
printf("\n inserire i valori ottenuti dagli individui del gruppo di analisi del farmaco \n");
/*array di immissione dei valori ottenuti nel gruppo farmaco */
for(i=0; i<nf; i++) {
printf("valore %d individuo: ", i+1);
scanf("%d", &valoref);
}
/* fusione dei due array */
int j,k;
i = 0; j = 0; k = 0;
do {
if(valorec<=valoref[j])
valoritot[k++] = valorec[i++];
else
valoritot[k++] = valoref[j++];
}
while(i<nc && j<nf);
if(i<nc)
for(; i<nc; valoritot[k++] = valorec[i++]);
c=tab;//c è un char, tab un array. Non puoi fare questo assegnamento
tab=tab[j];//???? tab è un array, tab[j] è un char. Non puoi fare questo assegnamento.
tab[j]=c;
}
Codice sorgente - presumibilmente C/C++
o {
if(valorec<=valoref[j]) //valorec è un array, questo confronto non è corretto
valoritot[k++] = valorec[i++];
else
valoritot[k++] = valoref[j++];
}
while(i<nc && j<nf);
Codice sorgente - presumibilmente C/C++
for(i=0;i<individui;i++){
tab=valoritot; //tab è un char, valoritot un array. Questo assegnamento non è corretto. Cosa intendevi?
}
Codice sorgente - presumibilmente Plain Text
combin(tab,0,nf); //Questa chiamata alla funzione combin non è corretta. Quella funzione chiede come 1° argomento un puntatore, non puoi passargli un carattere.
Ultima modifica effettuata da Matthew il 13/07/2009 alle 13:42
per quanto riguarda il codice ho utilizzato un algoritmo trovato in rete e non da problemi... ma essendo "nuova" nell'ambiente C sinceramente non so riconoscere a colpo d'occhio eventuali errori
Allora per quanto riguarda il salvataggio dei risultati in un array la cosa più semplice da fare è dichiarare un vector e inserirci i risultati.
Per prima cosa devi usare la libreria vector:
Codice sorgente - presumibilmente C/C++
#include <vector>
Poi dichiari il vector:
Codice sorgente - presumibilmente Plain Text
vector<char> vect;
Infine inserisci i dati così:
Codice sorgente - presumibilmente C++
void print_tab(unsignedchar tab[],int size_tab)
{
int i;
for(i=0;i<size_tab;i++)
vect.push_back(tab[i]);
printf("\n");
}
Alla fine ottieni un array che contiene tutti i risultati. L'array è stato dichiarato globalmente pertanto lo puoi richiamare da qualsiasi punto del programma.
Il vantaggio della classe vector è che alloca automaticamente la memoria a seconda della quantità di dati che ci inserisci. A differenza dei comuni array puoi quindi dichiararlo e inserirci dati anche quando non conosci ancora la quantità di memoria di cui avrà bisogno.
Spero di aver chiarito i tuoi dubbi, ma se hai ancora bisogno di aiuto non esitare a chiedere...
PS: se ti servono info a proposito dei vector puoi dare un'occhiata alla dispensa a questo proposito che ho recentemente scritto... La trovi nella home page del sito
Ultima modifica effettuata da Matthew il 13/07/2009 alle 14:49
non ho parole per la tua disponibilità, ti ringrazio tantissimo!
ora ci lavoro su e ti aggiorno, purtroppo pur non avendo molta conoscenza del C mi trovo a combattere con un progetto più grande di quanto mi aspettassi...
grazie ancora
non ho parole per la tua disponibilità, ti ringrazio tantissimo!
ora ci lavoro su e ti aggiorno, purtroppo pur non avendo molta conoscenza del C mi trovo a combattere con un progetto più grande di quanto mi aspettassi...
grazie ancora
ok..ho postato due volte per sbaglio lo stesso messaggio...
devo nuovamente disturbarti per una domanda..
se non ho capito male la libreria vector è di C++, ne esiste una equivalente per il C?o può essere usata indifferentemente?
scusami di nuovo e grazie
Allora... Ti chiedo scusa mi sono confuso... La libreria vector è esclusivamente per il C++.
In C l'utilizzo di array dinamici non è così semplice...
Però credo si possa fare anche senza gli array dinamici. Tu conosci la quantità di dati che dovrai immagazzinare no? Voglio dire quando l'utente inserisce il numero di individui nei due gruppi (ossia il numero di dati sperimentali), tu potresti già calcolare quanti risultati otterrai no? Così calcolato il numero di dati da inserire nell'array con i risultati potresti già allocare per l'array tutta la memoria che ti servirà.
Ultima modifica effettuata da Matthew il 13/07/2009 alle 15:21