Stránka 1 z 1

C - práce se souborem

Napsal: 04 kvě 2009 15:31
od Iron
Zdravím,

Mám vytvořit program, který má se souborem provést následující činnosti:
1. Celkový počet znaků v souboru
2. Celková počet řádek
3. Průměrný počet znaků na řádek
4. Nejdelší řádka
5. Nejkratší řádka

První dvě úlohy mám již vyřešené, třetí částečně (potřeboval bych výsledek v desetinných číslech), 4 a 5 neumím vyřešit. Pokud někdo víte jak na to, prosím poraďte.

Díky

#include <stdio.h>
#include <stdlib.h>

FILE *f;

int main(void)
{
int znaky, radky = 1, nejdelsi = 0, nejkratsi, celkem = 0;
float prumer;
f = fopen("soubor.txt", "r");


while((znaky = getc(f))!= EOF)
{
celkem++;
if (znaky == '\n')
{
radky++;
}

}




printf("pocet znaku %d\n",celkem);
printf("pocet radku je %d\n",radky);
prumer = celkem / radky;
printf("prumerny pocet znaku na radku je %4.5f",prumer);
system("PAUSE");

fclose(f);

return 0;

}

Re: C - práce se souborem

Napsal: 04 kvě 2009 16:55
od Sender
Body 3 a 4 bych řešil tak,že bych četl soubor po znacích a hledal oddělovače řádků.Při nalezení by se to vyhodnotilo (jedna proměnná by byla min a druhámax) a vynuloval by se counter.

Re: C - práce se souborem  Vyřešeno

Napsal: 04 kvě 2009 17:45
od Iron
EDIT: Tak už to počítá vše, nejdelší i nejkratší řádek. Díky Senderovi za snahu, byť jsem již věděl, to co řekl, spíše jsem potřeboval vidět hotový kód. Kód zobrazený v tomto příspěvku je správný.
Aktualizovaný kód:
#include <stdio.h>
#include <stdlib.h>

FILE *f;

int main(void)
{
int znaky, akrada = 1, akpocet = 0, nejdelsi = 0, nejkratsi;
float prumer, celkem = 0, radky = 1;
f = fopen("soubor.txt", "r");


while((znaky = getc(f))!= EOF)
{
celkem++;
akpocet++;

if (znaky == '\n')
{
radky++;
if (nejdelsi < akpocet)
{
nejdelsi = akpocet;
}
if (nejkratsi > akpocet)
{
nejkratsi = akpocet;
}
akpocet = 0;
}



}

printf("pocet znaku %4.0f\n",celkem);
printf("pocet radku je %4.0f\n",radky);
prumer = celkem / radky;
printf("prumerny pocet znaku na radku je %4.5f\n",prumer);
printf("nekratsi radka ma znaku %d\n",nejkratsi);
printf("nejdelsi radka ma znaku %d\n",nejdelsi);
system("PAUSE");

fclose(f);

return 0;

}