Non so continuare un programma... suggerimenti?

di il
2 risposte

Non so continuare un programma... suggerimenti?

Ciao a tutti, mi affido alla vostra esperienza sicuramente maggiore della mia per completare un programma in c: ho sviluppato ( a fatica) su linux in c un programma che mi analizza dei dati, la traccia e' questa:

# include <stdio.h>

main()
{
int K,i,n;
float distance_mono[M];
float distance_homo[M];
float distance_etero[M];
char predizione[M][2];

int n_mono,n_homo,n_hete;

do++K; while (getchar()!='\n');

n=-1;

for(i=0; getchar()!=EOF ; ++i) {

++n;

do++K; while (getchar()!='=');
scanf("%f",&distance_mono[n]);
do++K; while (getchar()!='\n');

do++K; while (getchar()!='=');
scanf("%f",&distance_homo[n]);
do++K; while (getchar()!='\n');

do++K; while (getchar()!='=');
scanf("%f",&distance_etero[n]);
do++K; while (getchar()!='\n');

for(K=0;K<=23;++K){
getchar();
}
for(K=0;K<=1;++K){
predizione[n][K]=getchar();
}
do++K; while (getchar()!='\n');

}

/*
for(i=0;i<=n;++i){
printf("%10d%20.3f%20.3f%20.3f %c%c\n",
i,
distance_mono,
distance_homo,
distance_etero,
predizione[0],predizione[1]);
}
*/

n_mono=0;
n_homo=0;
n_hete=0;
for(i=0;i<=n;++i){
if(predizione[0]=='m'&&predizione[1]=='o')++n_mono;
if(predizione[0]=='h'&&predizione[1]=='o')++n_homo;
if(predizione[0]=='h'&&predizione[i][1]=='e')++n_hete;
}
printf("tot = %10d\n",(n_mono+n_homo+n_hete));
printf("mono = %10d\nhomo = %10d\nhete = %10d\n",n_mono,n_homo,n_hete);


}


alla fine ottengo risultati tipo:
tot = 6221
mono = 1417
homo = 2296
hete = 2508

solo che adesso vorrei averli in %
calcolando la % ottengo ( circa e' 1 esempio)
mono (1417/6621) x 100 =21.42
homo (2296/6621) x100 =34.67
hete (2508/6621) x100=38.89

alla fine il risultato ottenuto con printf dovrebbe essere :
tot = 6221
mono = 21.42
homo = 34.67
hete = 38.89

ho usato un programma tipo
#include <stdio.h>

double Tot;
double Mono, xMono;
double Homo, xHomo;
double Hete, xHete;

void Main()
{
printf("inserisci il valore del totale");
scanf("%lf",Tot);
printf("inserisci il valore del Mono");
scanf("%lf",Mono);
printf("inserisci il valore del Homo");
scanf("%lf",Homo);
printf("inserisci il valore del Hete");
scanf("%lf",Hete);
xHomo = Homo / Tot * 100;
xMono = Mono / Tot * 100;
xHete = Hete / Tot * 100;
printf("La percentuale del Mono è %lf", xMono);
printf("La percentuale del Homo è %lf", xHomo);
printf("La percentuale del Hete è %lf", xHete);
}

solo che vorrei integrarlo con quello sopra cosi' da fare tutto in unico passaggio, ma c'e' un problema qui i dati li metto io, nel programma che vorrei fare li dovrebbe leggere in automatico, si puo' fare? scusatemi se ho scritto tantissimo e grazie per l'aiuto

2 Risposte

  • Re: Non so continuare un programma... suggerimenti?

    Ciao quel programma l'ho testato su linux. Ti posto il codice...
    ***************** main.c *************************
    #include <stdio.h>
    #include <string.h>
    //#include <cctype>
    #include <stdlib.h>
    //#include <windows.h> in linux non serve

    #define MONOMERIC 1
    #define HOMO_OLIGOMERIC 2
    #define HETERO_OLIGOMERIC 3

    char buffer[1024][1024]={'\0'};

    struct Proteins
    {
    float monomeric;
    float homo_oligomeric;
    float hetero_oligomeric;
    };

    int ReadFile();
    void MngValue(struct Proteins* prt);
    int GetProteins(struct Proteins* prt, int* Prev);

    int main()
    {
    struct Proteins prt[100];
    int previsionitot=0;
    int previs=0;
    int Prev[100];
    int mnmtr=0;
    int hmmtr=0;
    int htmtr=0;
    int i;

    previsionitot = ReadFile();
    MngValue(prt);
    previs=GetProteins(prt,Prev);
    for (i=0;i<previs;i++)
    {
    if (Prev==MONOMERIC)mnmtr++;
    }
    for (i=0;i<previs;i++)
    {
    if (Prev==HOMO_OLIGOMERIC)hmmtr++;
    }
    for (i=0;i<previs;i++)
    {
    if (Prev==HETERO_OLIGOMERIC)htmtr++;
    }

    printf("%s","Le previsioni sono: ");
    printf("%d\n",previs);
    printf("%s","Le previsioni nulle sono: ");
    printf("%d\n",previsionitot-previs);
    printf("%s","Le previsioni totali sono: ");
    printf("%d\n",previsionitot);
    printf("%s","monomeric: ");
    printf("%d\n",mnmtr);
    printf("%s","homo_oligomeric: ");
    printf("%d\n",hmmtr);
    printf("%s","hetero_oligomeric: ");
    printf("%d\n",htmtr);

    system("Pause");
    return 0;
    }

    int ReadFile()
    {
    FILE* fp;
    char str[2]={'\0'};
    long i,n;
    int c;

    i=n=c=0;
    /* scrivi nel primo parametro di questa funzione fopen il percorso del file dove stanno le tracce da analizzare. */
    fp = fopen("/home/nomeutente/test.txt","r");
    //fscanf(fp,"%s",buffer);
    while((c=getc(fp))!=EOF)
    {
    str[0]=c;
    sprintf(&buffer[n][0],"%s%s",&buffer[n][0],str);
    for (i=1;(c=getc(fp))!='\n';i++)
    {
    if (c==EOF) break;
    str[0]=c;
    sprintf(&buffer[n],"%s%s",&buffer[n],str);
    }
    n++;
    }
    fclose(fp);
    return n/3;
    }

    void MngValue(struct Proteins* prt)
    {

    char* p;
    char* d;
    double c,a;
    int i;
    c = a = 0;
    for(i=0;buffer[0]!='\0';i++)
    {
    p=&buffer[0];
    d = strstr(p,"=");
    d++;
    c = atoi(d);
    d=strstr(p,".");
    d++;
    a = atoi(d);
    c = c+(a/1000);
    if (i==0 || i%3==0){
    prt->monomeric =c;
    }
    else if (i==1 || (i-1)%3==0){
    prt->homo_oligomeric=c;
    }
    else
    {
    prt->hetero_oligomeric=c;
    prt++;
    }
    }
    }

    int GetProteins(struct Proteins* prt, int* Prev)
    {
    int c=0;
    int i;
    for(i=0;i<14;i++)
    {
    if (prt->monomeric <0 || prt->homo_oligomeric <0 || prt->hetero_oligomeric <0 || prt->monomeric >100 || prt->homo_oligomeric >100 || prt->hetero_oligomeric >100)
    prt++;
    else
    {
    if (prt->monomeric < prt->homo_oligomeric)
    if (prt->monomeric < prt->hetero_oligomeric )
    *Prev=MONOMERIC;
    //return MONOMERIC;
    else
    *Prev= HETERO_OLIGOMERIC;
    else if(prt->homo_oligomeric <prt->hetero_oligomeric) *Prev= HOMO_OLIGOMERIC;
    else *Prev= HETERO_OLIGOMERIC;
    c++;
    prt++;
    Prev++ ;
    }
    }
    return c;
    }
    ******************************************
    il file test.txt è strutturato come ti dissi...
    Ciao.
  • Re: Non so continuare un programma... suggerimenti?

    Grazie overloft! non sapevo proprio come continuare. buona giornata
Devi accedere o registrarti per scrivere nel forum
2 risposte