Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    2

    [C] inserire combinazioni in un array

    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>


    #define MAXNC 600
    #define MAXNF 600
    #define MAXR 1200




    void print_tab(unsigned char tab[],int size_tab)
    { int i;
    for(i=0;i<size_tab;i++)
    printf("%d",tab);
    printf("\n");
    }
    void permute(unsigned char tab[],unsigned char i,unsigned char j)
    {
    unsigned char c;
    c=tab;
    tab=tab[j];
    tab[j]=c;
    }
    void combin(unsigned char tab[],int i, int size_tab)
    {
    unsigned char j;
    if (i==size_tab)
    {
    print_tab(tab,size_tab);
    }
    else
    for(j=i;j<size_tab;j++)
    {
    permute(tab,i,j);
    combin(tab,i+1,size_tab);
    permute(tab,i,j);
    }
    }

    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++]);

    else
    for(; j<nf; valoritot[k++] = valoref[j++]);

    int individui;
    individui = nc + nf;


    unsigned char tab;
    for(i=0;i<individui;i++){
    tab=valoritot;
    }

    combin(tab,0,nf);


    }

    ------------------------------------------------------------------------------

    come posso fare per "nascondere" la stampa delle permutazioni e inserirle tutte in un array?
    spero qualcuno possa aiutarmi...
    Grazie
    Sara

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Non credo che queste righe segnate in rosso

    codice:
    void print_tab(unsigned char tab[], int size_tab)
    {
        int i;
        for (i = 0; i < size_tab; i++)
    	printf("%d", tab);
        printf("\n");
    }
    void permute(unsigned char tab[], unsigned char i, unsigned char j)
    {
        unsigned char c;
        c = tab;
        tab = tab[j];
        tab[j] = c;
    }
    originariamente fossero scritte così... immagino ci fosse un

    codice:
    tab[i]
    al posto del semplice "tab"... riposta il codice con i tag "code" così non si perde l'indentazione e non succedono queste "magie". Basta scrivere

    [code*]
    qui_metti_il_codice
    [/code*]

    senza gli asterischi nelle parentesi quadre (li ho messi per invalidare i tag e mostrare come si usano).

    È scritto anche nel regolamento
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    2
    hai ragione chiedo scusa e il bello è che lo sapevo anche inserire O_o
    me ne sono dimenticata all'ultimo sorry

    codice:
    #include <stdio.h>
    #include <stdbool.h>
    #include <math.h>
    #include <stdlib.h>
    #include <conio.h>
    
    
    #define MAXNC 600
    #define MAXNF 600
    #define MAXR 1200
    
    
    void print_tab(unsigned char tab[],int size_tab)
    { int i; 
    for(i=0;i<size_tab;i++)
     printf("%d",tab[i]);
    printf("\n"); 
    	} 
    void permute(unsigned char tab[],unsigned char i,unsigned char j)
    {
    unsigned char c;
    c=tab[i];
    tab[i]=tab[j];
    tab[j]=c;
    }
    void combin(unsigned char tab[],int i, int size_tab)
    {
    unsigned char j;
    if (i==size_tab)
    {
    print_tab(tab,size_tab);
    }
    else
    for(j=i;j<size_tab;j++)
    {
    permute(tab,i,j);
    combin(tab,i+1,size_tab);
    permute(tab,i,j);
    }
    }
    
    void  main()
    {
    	float alfa;
      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");
    
     printf(" Inserire l'errore di I tipo in forma decimale: ");
      scanf("%f", &alfa);
     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[i]); 
      }
     
      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[i]); 
      }
    
    /*stampa dei valori inseriti dall'utente
      printf("\n\n Verifca  dei valori inseriti\n\n");
      printf("Gruppo di controllo\n");
     
      for(i=0; i<nc; i++) {
        printf("valore %d individuo: %d \n", i+1, valorec[i]); }
    
      printf("\n\nGruppo di analisi\n");
    
      for(i=0; i<nc; i++) {
        printf("valore %d individuo: %d \n", i+1, valoref[i]); } 
    	getchar(); */
    
    /*  fusione dei due array  */
    int j,k;
    i = 0; j = 0; k = 0;
    	do {
    		if(valorec[i]<=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++])
    			;
    	else
    		for(; j<nf; valoritot[k++] = valoref[j++])
    			;
    	/* visualizzazione della fusione 
    for(i=0; i<k; i++)
    		printf("\n%d", valoritot[i]); */
    	int individui;
    	individui = nc + nf;
    	/* printf("individui totali: %d", individui); */
    
    
    	
    
    unsigned char tab[i];
    for(i=0;i<individui;i++){
    	tab[i]=valoritot[i];
    	} 
    
    combin(tab,0,nf);
    
    	
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ci sono alcune cose che non capisco. Le combinazioni sono quelle riportate in tab dopo la chiamata alla procedura combin()? Ma se sono dati numerici, perché usi un array di caratteri senza segno? Per risparmiare spazio in memoria forse perché sai che questi valori saranno sempre compresi tra 0 e 255?

    Poi, se le combinazioni sono appunto contenute in tab, non le tieni già salvate in un array?

    E ancora, il C non permette dichiarazioni di variabili in punti arbitrari del codice, bisogna scrivere tutte le dichiarazioni all'inizio della funzione... so che può essere comodo, ma è un'estensione del C++ e se compili con opzioni più restrittive (o con un compilatore C puro) dovrebbe segnalartelo.
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.