|
[ danijel_m @ 26.09.2006. 19:27 ] @
| Lijepi pozdrav,
napravio sam program koji mi nakon što upišem znak koji tražim i riječ koju pretražujem ispiše koliko se taj znak puta pojavljuje...
Zanima me kako napraviti da program
Code:
#include <stdio.h>
#include <string.h>
#define SIZE 10
int count(char a[], char g)
{
int i, b = 0, c = 1;
for(i = 0; a[i] != '\0'; i++)
if(a[i] == g) b += c;
printf("\n Broj %c - ova = %d\n", g, b);
return 0;
}
int main(void)
{
char a[SIZE], g;
int b;
printf("\n Upisi slovo: "); g = getchar();
printf("\n Upisi rijec: "); scanf("%s", a);
count(a,g);
return 0;
}
više ne radi na ovaj način nego da mi čita iz datoteke i upisuje u drugu datoteku... Nešto sam napravio, no program provrti (mislim ne javlja da ima grešaka u njemu), no ono što prebroji trebao bi upisati u drugu datoteku (naravno toga nema)...
Evo i kod što sam napravio... Sumnjam da mi nešto valja...
Code:
#include <stdio.h>
#define MAX 128
void ucitavanje (FILE *f, char M[MAX])
{
int i;
for (i=0; i='\0';i++)
fscanf(f,"%c",&M[MAX]);
}
int count(char a[MAX], char g)
{
int i, b = 0, c = 1;
for(i = 0; a[i] != '\0'; i++)
if(a[i] == g) b += c;
printf("\n Broj %c - ova = %d\n", g, b);
}
int main(void)
{
FILE *f,*h;
char a[MAX],g;
f=fopen("ispis.txt","r");
ucitavanje(f,a);
printf("Unesite slovo:");g=getchar();
h=fopen("upis.txt","w");
fprintf(h,"%d",count(a,g));
fclose(h);
}
Unaprijed hvala na pomoći |
[ Mali Misha @ 27.09.2006. 17:47 ] @
Koliko sam razumeo, treba da u jedan fajl upišeš koliko se puta neki simbol pojavljuje u nekom drugom fajlu. Ovde nije potrebno da ulazni fajl smestiš u memoriju, nego samo da ga pročitaš. Pak, ako vršiš više od jedne analize nad umereno velikim fajlom, učitavanje fajla u memoriju radi analize će poboljšati performanse.
Za sada, baci pogled na sledeću f-ju koja vraća broj pojavljivanja određenog simbola u nekom fajlu.
Code: //netestirano
int count(const char*filename,char symbol)
{
FILE *f = fopen(filename,"r");
int n = 0;
char c;
if(f) // za slucaj da fajl nije bio otvoren
{
while(1)
{
c = fgetc(f);
if(feof(f)) break;
if(c == symbol) n++;
}
fclose(f);
}
return n;
}
Inače while petlja iz primera gore, bez drugog if, je jedan od načina da se pročita fajl od početka do kraja. Drugi malo kompaktniji je
Code: while((c = fgetc(f)) != EOF)
{
// ...
}
[ toxi_programer @ 27.09.2006. 19:40 ] @
Code:
#include <stdio.h>
#define MAX 100000
void ucitavanje (FILE *f, char M[MAX])
{
int i=0;
while( (M[i++] = fgetc(f)) != EOF );
fclose(f);
}
int count(char a[MAX], char g)
{
int i, b = 0;
for(i = 0; a[i] != '\0'; i++)
if(a[i] == g) b++;
printf("\n Broj %c - ova = %d\n", g, b);
return b;
}
int main(void)
{
FILE *f,*h;
char a[MAX],g;
f=fopen("text.txt","r");
ucitavanje(f,a);
printf("Unesite slovo:"); g = getchar(); fflush(stdin);
h=fopen("upis.txt","w");
fprintf(h,"%d",count(a,g));
fclose(h);
}
/* scanf() ti nije radio jer si ga napisao tako da ucitava samo prvi znak iz fajla.*/
[ danijel_m @ 01.10.2006. 00:03 ] @
Hvala na pomoći no uspio sam ga riješiti...
U biti je sve isto...
Code:
#include <stdio.h>
#define MAX 128
int citaj(FILE *a, char g)
{
int i,b=0;
char c;
c=fgetc(a);
for(i=0; c != EOF; i++)
{
if (c==g)
{
b++;
}
c=fgetc(a);
}
return b;
}
int main(void)
{
FILE *a, *b;
char g;
int c;
a=fopen("a.txt", "r");
b=fopen("b.txt", "w");
printf("daj slovo");
scanf("%c",&g);
c=citaj(a,g);
fprintf(b,"%c %d",g,c);
fclose(a);
fclose(b);
}
Ne bih otvarao novi post, no možete li mi reći da li sam dobro napravio zadatak što sam imao na ispitu... Zadatak ide ovako:
Zadana je struktura:
struct vrijeme{
char temperatura;
char tlak;
struct vrijeme *next;
};
Treba napisati funkciju void najvecaTemperatura(vrijeme *a, vrijeme *b, vrijeme *c) koja će uspoređivati prve temperature (odnosi se na a i b) i veću će upisati u c...
Nadam se da nisam nesto preskocio... Čini mi se zadatak prejednostavan, a možda i griješim...
Ovako sam ga riješio:
Code:
void najvecaTemperatura(vrijeme *a, vrijeme *b, vrijeme *c)
{
if(a->temperatura < b->temperatura)
{
c->temperatura = b->temperatura;
}
else
{
c->temperatura = a->temperatura;
}
}
Hvala na pomoći
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|