Program spočíta matematické príklady ktoré sú zapísané v textovom súbore

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategórie: Programy v C, C++

Program: Calctxt.c
Soubor exe: Calctxt.exe
Příklady: Calctxt.txt

Program spočíta matematické príklady ktoré sú zapísané v textovom súbore.
// CALCTXT.C                Copyright (c) TrSek alias Zdeno Sekerak 
// Program spocita matematicke priklady ktore su zapisane v textovom subore.
//                                                                   
// Datum:10.12.2008                             http://www.trsek.com 
 
#include <stdio.h>
 
void main(void)
{
FILE *f, *fo;
char subor[32];
int cislo1;
int cislo2;
char operand;
char znak;
int  vysledok;
int i;
int koniec;
 
	printf("Zadaj meno suboru:");
	i=0;
 
	do
	{
	    subor[i] = getch();
	    putch(subor[i]);
	}while (subor[i++]!='\r');
 
	subor[i-1]='\0';
 
	f = fopen(subor, "rt");
	fo = fopen("temp.$$$", "wt+");
	if( f==NULL )
	{
	    printf("Nemozem otvorit subor.");
	    return;
	}
 
	while( !feof(f))
	{
	cislo1=0;
	koniec=1;
 
	do {
		znak = fgetc(f);
		if( feof(f))
		    goto koniec;
		fputc(znak,fo);
 
		if(znak >='0' && znak <='9')
		    cislo1=cislo1*10 + znak-'0';
		else
			koniec=0;
	} while(koniec);
 
	operand = znak;
	cislo2=0;
	koniec=1;
 
	do {
		znak = fgetc(f);
		fputc(znak,fo);
 
		if(znak >='0' && znak <='9')
		    cislo2=cislo2*10 + znak-'0';
 
		if( znak=='=' )
			koniec=0;
	} while(koniec);
 
	// do konca riadku
	do {
	   znak = fgetc(f);
	} while(( znak != '\n') && ( znak != '\r') && !feof(f));
 
	if(operand=='+')
		vysledok = cislo1+cislo2;
 
	if(operand=='-')
		vysledok = cislo1-cislo2;
 
	if(operand=='*')
		vysledok = cislo1*cislo2;
 
	if(operand=='/')
		vysledok = cislo1/cislo2;
 
	// zapis, minus
	if(vysledok<0) { fputc('-',fo); vysledok=-1*vysledok; }
	koniec=0;
 
	znak=(vysledok/1000);
	vysledok=vysledok % 1000;
	if(znak || koniec)
	{
	koniec=1;
	fputc(znak+'0',fo);
	}
 
	znak=(vysledok/100);
	vysledok=vysledok % 100;
	if(znak || koniec)
	{
	koniec=1;
	fputc(znak+'0',fo);
	}
 
	znak=(vysledok/10);
	vysledok=vysledok % 10;
	if(znak || koniec)
	{
	koniec=1;
	fputc(znak+'0',fo);
	}
 
	//znak=vysledok;
	fputc(vysledok+'0',fo);
 
	fputc('\n',fo);
    }
 
koniec:
 
    // zatvorime
    fclose(f);
    fclose(fo);
 
    // premenujeme
    remove(subor);
    rename("temp.$$$", subor);
}