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: (3560)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: (3560)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: (3560)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] |
|
|