| Prethodna tema :: Sljedeća tema   | 
	
	
	
		| Autor/ica | 
		Poruka | 
	
	
		purist Forumaš(ica)
  
  
  Pridružen/a: 20. 09. 2011. (23:16:53) Postovi: (18)16 
Spol:   
 
		 | 
		
			
				 Postano: 0:37 pet, 1. 6. 2012    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         oprostite na gnjavazi, ali sad me jos samo ovaj muci (znam da je bilo takvih vec prije, samo mislim da je ovo malo drukcije rijeseno, i radije bih da moj kod napokon proradi, iako na mojim, valjda nedovoljno mastovitim primjerima, uspjesno radi). malo je zadnji cas i to... (:
 
 Napišite program koji čita datoteku "rojuixkb.in", te ju prepisuje u datoteku "rojuixkb.out" tako da u prepisivanju sva pojavljivanja stringa "yl" zamijeni stringom "gzeqwfx".
 Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
 
 [code:1]
 #include <stdio.h>
 #include <stdlib.h>
 
 int main(void)
 {
     FILE *fp1, *fp2;
     long int ftell_pos;
     int i;
     char string1[]="yl", string2[]="gzeqwfx";
     char *tren;
     char c;
 
     fp1=fopen("rojuixkb.in","r");
     if(!fp1) exit(1);
 
     fp2=fopen("rojuixkb2.out","w");
     if(!fp2) exit(2);
 
     while(fscanf(fp1,"%c",&c)>0)
     {
         tren=(char *)malloc(sizeof(char));
         tren[0]=c;
 
         ftell_pos=ftell(fp1);
 
         if(fscanf(fp1,"%c",&c)>0)
         tren[1]=c;
         tren[2]='\0';
 
         if(strcmp(tren,string1)==0)
             fprintf(fp2,"%s",string2);
 
         else
         {
             fprintf(fp2,"%c",tren[0]);
             fseek(fp1,ftell_pos,SEEK_SET);
         }
 
         for(i=0;i!='\0';i++)
             free(tren);
     }
 
     fclose(fp1);
     fclose(fp2);
     return 0;
 
 }
 
 [/code:1] 
					
					oprostite na gnjavazi, ali sad me jos samo ovaj muci (znam da je bilo takvih vec prije, samo mislim da je ovo malo drukcije rijeseno, i radije bih da moj kod napokon proradi, iako na mojim, valjda nedovoljno mastovitim primjerima, uspjesno radi). malo je zadnji cas i to... (:
 
 
Napišite program koji čita datoteku "rojuixkb.in", te ju prepisuje u datoteku "rojuixkb.out" tako da u prepisivanju sva pojavljivanja stringa "yl" zamijeni stringom "gzeqwfx".
 
Napomena: Nemojte uvoditi ograničenja na duljinu datoteke i/ili pojedinih linija i riječi u datoteci.
 
 
 	  | Kod: | 	 		  
 
#include <stdio.h>
 
#include <stdlib.h>
 
 
int main(void)
 
{
 
    FILE *fp1, *fp2;
 
    long int ftell_pos;
 
    int i;
 
    char string1[]="yl", string2[]="gzeqwfx";
 
    char *tren;
 
    char c;
 
 
    fp1=fopen("rojuixkb.in","r");
 
    if(!fp1) exit(1);
 
 
    fp2=fopen("rojuixkb2.out","w");
 
    if(!fp2) exit(2);
 
 
    while(fscanf(fp1,"%c",&c)>0)
 
    {
 
        tren=(char *)malloc(sizeof(char));
 
        tren[0]=c;
 
 
        ftell_pos=ftell(fp1);
 
 
        if(fscanf(fp1,"%c",&c)>0)
 
        tren[1]=c;
 
        tren[2]='\0';
 
 
        if(strcmp(tren,string1)==0)
 
            fprintf(fp2,"%s",string2);
 
 
        else
 
        {
 
            fprintf(fp2,"%c",tren[0]);
 
            fseek(fp1,ftell_pos,SEEK_SET);
 
        }
 
 
        for(i=0;i!='\0';i++)
 
            free(tren);
 
    }
 
 
    fclose(fp1);
 
    fclose(fp2);
 
    return 0;
 
 
}
 
 
 | 	  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 1:25 pet, 1. 6. 2012    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         1. Izlazna datoteka se krivo zove.
 
 2. Za [tt]tren[/tt] alociras memoriju za 1 [tt]char[/tt], a koristis njih 3.
 
 3. Ne zapisujes zadnji znak.
 
 4. [tt]for(i=0;i!='\0';i++)[/tt] je petlja koja se niti jednom ne izvrsava (jer je [tt]'\0' == (char)0[/tt]), a kad bi se izvrsavala, rusila bi program jer bi vise puta oslobadjala onaj jedan ubogi byte na kojeg pokazuje [tt]tren[/tt].
 
 Cemu uopce dinamicka alokacija kad znas da koristis najvise 3 znaka? 
					
					1. Izlazna datoteka se krivo zove.
 
 
2. Za tren alociras memoriju za 1 char, a koristis njih 3.
 
 
3. Ne zapisujes zadnji znak.
 
 
4. for(i=0;i!='\0';i++) je petlja koja se niti jednom ne izvrsava (jer je '\0' == (char)0), a kad bi se izvrsavala, rusila bi program jer bi vise puta oslobadjala onaj jedan ubogi byte na kojeg pokazuje tren.
 
 
Cemu uopce dinamicka alokacija kad znas da koristis najvise 3 znaka?
					_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
 
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.   
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		PermutiranoPrase Forumaš(ica)
  
  
  Pridružen/a: 10. 09. 2011. (16:08:19) Postovi: (F4)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Shaman Forumaš(ica)
  
  
  Pridružen/a: 24. 09. 2011. (22:21:43) Postovi: (76)16 
Spol:   
 
		 | 
		
			
				 Postano: 11:17 pet, 1. 6. 2012    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         zadatak: Zadana je datoteka "pqxpa.in" u kojoj se u prvoj liniji nalazi prirodni broj n, a u idućih n redaka zapisani su datumi u formatu
 d.m.g.
 (po jedan u svakom retku). Datume treba prepisati u datoteku "pqxpa.out" u formatu
 koliko/d.m.g.
 pri čemu je koliko broj pojavljivanja datuma u datoteci, a datumi trebaju biti sortirani od najstarijeg prema najnovijem.
 
 molio bih pomoc, nekoliko varijanti sam poslao ali negdje ima greska koju nemogu pornac
 [code:1]
 #include <stdio.h>
 #include <stdlib.h>
 
     typedef struct datum{
         int dan,mj,god;
     }datum;
 
 
    int koliko(int n,datum *m,datum koji){
        int i,koliko=0;
 
        for(i=0; i < n; ++i)
         if((koji.dan == m[i].dan) && (koji.mj == m[i].mj) && (koji.god == m[i].god))  /* broji koliko puta se pojavljuje odredjeni datum*/
             ++koliko;
         return koliko;
    }
 
    int bio(datum *bili, int d, datum m){
        int i;
 
         for(i=0; i < d; ++i)
             if((bili[i].dan == m.dan) && (bili[i].mj == m.mj) && (bili[i].god == m.god))    /*provjerava je li odredjeni datum bio vec ispisan u datateku*/
                 return 1;
         return 0;
    }
 
 
     void zadatak(FILE *in,FILE *out){
         int n,i,j,d=0;
         int dan,mj,god;
         datum *m,*bili=NULL;
 
         fscanf(in,"%d",&n);
         if((m=(datum*)malloc(n*sizeof(datum))) == NULL){
             printf("greska 3");
             exit(3);
         }
 
         for(i=0; i < n; ++i)
             if(fscanf(in,"%d.%d.%d.",&dan,&mj,&god) > 0){
                 m[i].dan=dan;
                 m[i].mj=mj;
                 m[i].god=god;
             }
 
         for(i=0; i < n-1; ++i)                                                /*uzlazni sort*/
             for(j=i; j < n; ++j){
                 if(m[i].god > m[j].god){
                         datum pom=m[i];
                         m[i]=m[j];
                         m[j]=pom;
                 }
                 else{
                     if((m[i].god == m[j].god) && (m[i].mj > m[j].mj)){
                         datum pom=m[i];
                         m[i]=m[j];
                         m[j]=pom;
                     }
                     else if(((m[i].god == m[j].god) && (m[i].mj > m[j].mj)) && (m[i].dan > m[j].dan)){
                             datum pom=m[i];
                             m[i]=m[j];
                             m[j]=pom;
                     }
                 }
             }
 
         for(i=0; i < n; ++i)                                                        /*ispis structova u datoteku*/
             if(bili == NULL || !bio(bili,d,m[i])){
                 fprintf(out,"%d/%d.%d.%d.",koliko(n,m,m[i]),m[i].dan,m[i].mj,m[i].god);
                 if(i != n-1)
                     fprintf(out,"\n");
                 if((bili=(datum*)realloc(bili,++d*sizeof(datum))) == NULL){
                     printf("greska");
                     exit(4);
                 }
                 bili[d-1].dan=m[i].dan;
                 bili[d-1].mj=m[i].mj;
                 bili[d-1].god=m[i].god;
             }
 
         free(m);
         m=NULL;
         free(bili);
         bili=NULL;
         return;
     }
 
 
     int main(void){
         FILE *in,*out;
         char inname[]="pqxpa.in",outname[]="pqxpa.out";
 
         if((in=fopen(inname,"r")) == NULL){
             printf("greska 1");
             exit(1);
         }
         if((out=fopen(outname,"w")) == NULL){
             fclose(in);
             printf("greska 2");
             exit(2);
         }
 
         zadatak(in,out);
         fclose(in);
         fclose(out);
     }[/code:1] 
					
					zadatak: Zadana je datoteka "pqxpa.in" u kojoj se u prvoj liniji nalazi prirodni broj n, a u idućih n redaka zapisani su datumi u formatu
 
d.m.g.
 
(po jedan u svakom retku). Datume treba prepisati u datoteku "pqxpa.out" u formatu
 
koliko/d.m.g.
 
pri čemu je koliko broj pojavljivanja datuma u datoteci, a datumi trebaju biti sortirani od najstarijeg prema najnovijem.
 
 
molio bih pomoc, nekoliko varijanti sam poslao ali negdje ima greska koju nemogu pornac
 
 	  | Kod: | 	 		  
 
#include <stdio.h>
 
#include <stdlib.h>
 
 
    typedef struct datum{
 
        int dan,mj,god;
 
    }datum;
 
 
 
   int koliko(int n,datum *m,datum koji){
 
       int i,koliko=0;
 
 
       for(i=0; i < n; ++i)
 
        if((koji.dan == m[i].dan) && (koji.mj == m[i].mj) && (koji.god == m[i].god))  /* broji koliko puta se pojavljuje odredjeni datum*/
 
            ++koliko;
 
        return koliko;
 
   }
 
 
   int bio(datum *bili, int d, datum m){
 
       int i;
 
 
        for(i=0; i < d; ++i)
 
            if((bili[i].dan == m.dan) && (bili[i].mj == m.mj) && (bili[i].god == m.god))    /*provjerava je li odredjeni datum bio vec ispisan u datateku*/
 
                return 1;
 
        return 0;
 
   }
 
 
 
    void zadatak(FILE *in,FILE *out){
 
        int n,i,j,d=0;
 
        int dan,mj,god;
 
        datum *m,*bili=NULL;
 
 
        fscanf(in,"%d",&n);
 
        if((m=(datum*)malloc(n*sizeof(datum))) == NULL){
 
            printf("greska 3");
 
            exit(3);
 
        }
 
 
        for(i=0; i < n; ++i)
 
            if(fscanf(in,"%d.%d.%d.",&dan,&mj,&god) > 0){
 
                m[i].dan=dan;
 
                m[i].mj=mj;
 
                m[i].god=god;
 
            }
 
 
        for(i=0; i < n-1; ++i)                                                /*uzlazni sort*/
 
            for(j=i; j < n; ++j){
 
                if(m[i].god > m[j].god){
 
                        datum pom=m[i];
 
                        m[i]=m[j];
 
                        m[j]=pom;
 
                }
 
                else{
 
                    if((m[i].god == m[j].god) && (m[i].mj > m[j].mj)){
 
                        datum pom=m[i];
 
                        m[i]=m[j];
 
                        m[j]=pom;
 
                    }
 
                    else if(((m[i].god == m[j].god) && (m[i].mj > m[j].mj)) && (m[i].dan > m[j].dan)){
 
                            datum pom=m[i];
 
                            m[i]=m[j];
 
                            m[j]=pom;
 
                    }
 
                }
 
            }
 
 
        for(i=0; i < n; ++i)                                                        /*ispis structova u datoteku*/
 
            if(bili == NULL || !bio(bili,d,m[i])){
 
                fprintf(out,"%d/%d.%d.%d.",koliko(n,m,m[i]),m[i].dan,m[i].mj,m[i].god);
 
                if(i != n-1)
 
                    fprintf(out,"\n");
 
                if((bili=(datum*)realloc(bili,++d*sizeof(datum))) == NULL){
 
                    printf("greska");
 
                    exit(4);
 
                }
 
                bili[d-1].dan=m[i].dan;
 
                bili[d-1].mj=m[i].mj;
 
                bili[d-1].god=m[i].god;
 
            }
 
 
        free(m);
 
        m=NULL;
 
        free(bili);
 
        bili=NULL;
 
        return;
 
    }
 
 
 
    int main(void){
 
        FILE *in,*out;
 
        char inname[]="pqxpa.in",outname[]="pqxpa.out";
 
 
        if((in=fopen(inname,"r")) == NULL){
 
            printf("greska 1");
 
            exit(1);
 
        }
 
        if((out=fopen(outname,"w")) == NULL){
 
            fclose(in);
 
            printf("greska 2");
 
            exit(2);
 
        }
 
 
        zadatak(in,out);
 
        fclose(in);
 
        fclose(out);
 
    } | 	  
					
 
  _________________ it was merely a setback 
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		Shaman Forumaš(ica)
  
  
  Pridružen/a: 24. 09. 2011. (22:21:43) Postovi: (76)16 
Spol:   
 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		mdoko Forumaš(ica)
  
  
  Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16 
Spol:   
Lokacija: Heriot-Watt University, Edinburgh 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |