Zo suboru do 1rozm. dyn. pola a praca snimi

Sekcia: Programovanie 29.03.2014 | 02:05
Jaro   Návštevník

Zdravim, chcel by som vas poziadat o pomoc pri probleme, ktory sa mi vyskytol ...Je dany subor, ktory obsahuje pismena,len tak random(mala by to byt DNA sekvencia).Ak sa v subore nachadzaju len pismena A/a , C/c, G/g a T/t ,potom to vyhovuje poziadavke a malo by sa vyvtorit dynamicke jednorozmerne pole,do ktoreho obsah suboru prekopirujem. Ak obsahuje aj ine pismena,ako tie, ktore ma (A/a , C/c, G/g a T/t), tak vypise len hlasku,ze "nevyhovuje" a pod....Neviem,kde je chyba, ale pri krokovani programu som zistil,ze to pole nadobuda vseliake nezmyselne hodnoty...uz po vsetkych moznych upravach a moznostiach, ktore ma napadli som sa rozhodol to uz dalej nemrvit a radsej sa obratit o pomoc.vopred dakujem za kazdu radu

char *n()
{
	FILE *fr;
	int pocet_znakov=0,i=0;
	char c;
	char *pole_subor;
	int pom=0;

	if( (fr=fopen("DNAsekvencia.txt","r")) == NULL){
		printf("Neotvoreny subor ");
	}

	while (c=getc(fr) != EOF){		//zistenie poctu znakov v subore,pre alokaciu pamate

		pocet_znakov++;		
	}			
	rewind(fr);

	while (c=getc(fr) != EOF){				//zistenie ci vyhovuje,prechadzam subor po znakoch a kontroluje ci vyhovuje

		if ( (c == ( ('A') || ('a') || ('C') || ('c') || ('G') || ('g') || ('T') || ('t') )))
			pom=1;		//len pomocna premenna
		else 
			pom=0;
	}	
	
	if(pom==1)
	{

	printf("Podarilo sa nacitat pole");
	pole_subor= (char*) malloc (pocet_znakov * sizeof(char));		//vytvorenie 1rozm. dynamickeho pola
	
	for (i = 0 ; i < pocet_znakov; i++){						// naplnenie pola obsahom v subore
	pole_subor[i] = (c = getc(fr));
		}

	}
	else {
		printf("nepodarilo");
	}

	printf("\n");
	return  pole_subor;		
}

    • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 02:08
      Avatar Jaro   Návštevník

      Zabudol som,jedna sa o C code....len pre istotu

    • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 12:52
      Avatar mordor   Návštevník

      Len niekolko postrehov:

      getc vracia int

      Na chybe by som hned vratil NULL a nenechal to "prepadnut" az nakoniec.

      "zistenie ci vyhovuje,prechadzam subor po znakoch a kontroluje ci vyhovuje" ten cyklus zistije len ci vyhovuje posledny znak.

      • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:03
        Avatar jaro   Návštevník

        a potom cez aky cyklus mam zistovat,ci vsetky znaky suboru vyhovuju??

        • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:13
          Avatar WlaSaTy   Návštevník

          Chýba Ti tam aj pretočenie na začiatok súboru.

          • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:23
            Avatar jaro   Návštevník

            kde by malo ist to pretocenie??a aky by mal byt ten cyklus na prechadzanie suboru po znakoch?lebo toto je jedine,co ma napada...

            • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:31
              Avatar mordor   Návštevník

              Pred for (i = 0 ; i < pocet_znakov; i++) a malloc moze aj zlyhat...

        • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:26
          Avatar mordor   Návštevník
          while (c=getc(fr) != EOF){				//zistenie ci vyhovuje,prechadzam subor po znakoch a kontroluje ci vyhovuje
          
          		if ( (c != ('A') && c != ('a') && c != ('C') && c != ('c') && c != ('G') && c != ('g') && c != ('T') && c != ('t') ))
          			printf("Nevyhovuje\n");
          			return NULL;
          	}
          

          Nejak tak, editoval som to priamo tu, takze chyba sa tam iste najde.

          • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:34
            Avatar mordor   Návštevník

            Uz vidim ze okolko if bloku chybaju {}

          • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:39
            Avatar jaro   Návštevník

            tak ako si napisal to nemoze byt,lebo ak nemylim,tak operator && sposobi to,ze ked bude vyhovovat prve,dalej uz nejde...cize ako najde velke A potom uz dalej nejde...ci sa mylim?

            • RE: Zo suboru do 1rozm. dyn. pola a praca snimi 29.03.2014 | 13:51
              Avatar jaro   Návštevník
              char *n()
              {
              	FILE *fr;
              	int pocet_znakov=0,i=0;
              	char c;
              	char *pole_subor;
              	int pom=0;
              
              	if( (fr=fopen("DNAsekvencia.txt","r")) == NULL){
              		printf("Neotvoreny subor ");
              	}
              
              	while (c=getc(fr) != EOF){		//zistenie poctu znakov v subore,pre alokaciu pamate
              
              		pocet_znakov++;		
              	}			
              	rewind(fr);
              
              
              	while (c=getc(fr) != EOF){				//zistenie ci vyhovuje,prechadzam subor po znakoch a kontroluje ci vyhovuje
              
              		if ( (c == ( ('A') || ('a') || ('C') || ('c') || ('G') || ('g') || ('T') || ('t') )))
              			pom=1;		//len pomocna premenna
              		else 
              			pom=0;
              	}	
              
              	if(pom==1)
              	{
              
              	printf("Podarilo sa nacitat pole \n");
              	pole_subor= (char*) malloc (pocet_znakov * sizeof(char));		//vytvorenie 1rozm. dynamickeho pola
              	
              	for (i = 0 ; i < pocet_znakov; i++){						// naplnenie pola obsahom v subore
              	pole_subor[i] = (c = getc(fr));
              		}
              		return  pole_subor;	
              	}
              	else {
              		printf("nepodarilo \n");
              	}
              	
              
              	printf("\n");	
              }
              

              toto je posledne co mam...neviem uz co stym,ak by bol niekto ochotny mi priamo k tomuto povedat,co je zle a ako to napravit,velmi by som to ocenil,nakolko vsetky dalsie funkcie mi stoja na tejto a aj ked ich mam,nemozem ich vyskusat,ci funguju tak ako maju :/

    • odpoved poriadne 29.03.2014 | 20:44
      Avatar d_   Návštevník