[ create a new paste ] login | about

Link: http://codepad.org/OVFvaFwc    [ raw code | output | fork ]

fityiszkukac - C, pasted on Dec 1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define MIN_N 1				// minimum pályázat
#define MAX_N 100			// maximum pályázat
#define MIN_M 1				// minimum parcella
#define MAX_M 100			// maximun parcella
#define MIN_AR 1000			// minimum ár
#define MAX_AR 1000000		// maximum ár

struct p_					// A pályázat struktúrája
{
	int n,m;				// 'n' a pályázatok szána, 'm' parcellák száma
	int par_e[MAX_N-1];		// első parcella
	int par_u[MAX_N-1];		// utolsó száma
	float p_ert[MAX_N-1];   // pályázat értéke
	char p_flag[MAX_N-1];   // hiba jelző
};

void hiba(const char *h_leir, char flag)	 // hibaüzenet ki
// h_leir = hibaüzenet szövege
// ha flag = 1 akkor kilép
// ha flag = 0 akkor visszatér
{
	if (flag==0) 
	{
		fprintf(stderr,h_leir);
		return;
	}
	if (flag==1)
	{
		fprintf(stderr,"Végzetes hiba :\n%s\nKilépés a programbol ...\n",h_leir);
		exit (1);
	}
}

#define BUFF_SIZE 256   // puffer mérete
struct p_ beolvas()
{
	FILE *f;
	int x=0,c=0,flag=0;
	char buff[BUFF_SIZE];
	struct p_ p;
	
	f = fopen("licit.be","r");
	if (f==NULL) hiba("Nem lehet megnyitni a 'licit.be' file -t !\n",1);
	flag=fscanf(f,"%d %d",&p.n,&p.m);
	if (flag==EOF) 
	{
		fclose(f);
		hiba("A 'licit.be' file hibás (kevés adat) !\n",1);
	}
	if (flag!=2)
	{
		fclose(f);
		hiba("A 'licit.be' file hibás (első sor) !\nFormátum : x y\nx = pályázatok száma\ny = parcellák száma\n",1);
	}
	if (p.n<MIN_N || p.n>MAX_N || p.m<MIN_M || p.m>MAX_M)
	{
		fclose(f);
		sprintf(buff,"A 'licit.be' file hibás (első sor) !\nFormátum : x y\nx = pályázatok száma (%d-%d)\ny = parcellák száma (%d-%d)\n",MIN_N,MAX_N,MIN_M,MAX_M);
		hiba(buff,1);
	}
	do
	{
		flag=fscanf(f,"%d %d %f",&p.par_e[x],&p.par_u[x],&p.p_ert[x]);
		if (flag!=EOF)
		{
			p.p_flag[x]=0;
			if (flag!=3)
			{
				fclose(f);
				sprintf(buff,"A 'licit.be' file hibás (%d. sor) !\nFormátum : x y z\nx = parc.-tól\ny = parc.-ig\n z = ennyiért\n",x+1);
				hiba(buff,1);
			}
			if (p.par_u[x]<p.par_e[x])
			{
				sprintf(buff,"A 'licit.be' file hibás (%d. sor) !\nFormátum : x y z\nx = parc.-tól\ny = parc.-ig\n z = ennyiért\n",x+1);
				hiba(buff,0);
				hiba("x <= y\nFeltételezem hogy véletlen elírá, ezért kicserélem a két operandust.\n",0);
				c=p.par_u[x]; p.par_u[x]=p.par_e[x]; p.par_e[x]=c;
			}
			if (p.p_ert[x]<MIN_AR || p.p_ert[x]>MAX_AR)
			{
				sprintf(buff,"A 'licit.be' file hibás (%d. sor) !\nFormátum : x y z\nx = parc.-tól\ny = parc.-ig\n z = ennyiért\n",x+1);
				hiba(buff,0);
				sprintf(buff,"Az ár értékhatáron kívül esik (%d - %d) !\nÉrvénytelen pályázat.",MIN_AR,MAX_AR);
				hiba(buff,0);
				p.p_flag[x]=1;
			}
			x++;
		}
	}while(flag!=EOF);
	fclose(f);
	if (x!=p.n)
		hiba("A licit.be fileban megadott pályázatok száma nem egyezik az adatsorok számával.\n",1);
	return (p);
}


struct ljp				// a legjobb pályázat struktúrája
{
	int psz;			// pályázatok száma
	char pl[MAX_N];		// pályázatok listálya
	float ert;
};


void kiir(struct ljp legj,char flag)
{
	FILE *f;
	int x=0;
	
	if (flag==1) f=fopen("licit.ki","a");
	else f=fopen("licit.ki","w");
	if(f==EOF) hiba("nem lehet mergnyitni a 'licit.ki' file -t !",1);
	fprintf(f,"%f\n",legj.ert);
	do
	{
		fprintf(f,"%d ",legj.pl[x]+1);
		x++;
	}while (x<legj.psz);
	fprintf(f,"\n");
	fclose(f);
}


void main ()
{
	struct p_ p;			// a pályázat változója
	int x=0,y=0,vx,vy;
	struct ljp legj;
	struct ljp akt;
	
	p = beolvas();
	fopen("licit.ki","w");
	fcloseall();

	legj.psz=1;
	legj.pl[0]=0;
	legj.ert=p.p_ert[0];
	akt.ert=0;
	if (p.n==1) { kiir(legj,0); exit; }

	do
	{
		y=x+1; akt.ert=p.p_ert[x]; akt.psz=1; akt.pl[akt.psz-1]=y-1;
		do
		{
			if (p.par_e[x]<=p.par_e[y])  { vx=x; vy=y; }
			else	{ vx=y; vy=x; }
			if (p.par_e[vx]==p.par_e[vy] || p.par_u[vx]>=p.par_e[vy]) 
			{
				y++;
			}
			else { akt.pl[akt.psz]=y; akt.ert=akt.ert+p.p_ert[y]; akt.psz++; y++; }
		}while (y<p.n);
		if (akt.ert>=legj.ert)
		{
			if (akt.ert==legj.ert) kiir(legj,1); // ha több egyforma értékü variáció is van
			legj.ert=akt.ert;
			legj.psz=akt.psz;
			memcpy(legj.pl,akt.pl,legj.psz*sizeof(char));
		}
		x++;
	}while(x<p.n-1);
	kiir(legj,0);
	return;
}


Output:
1
2
3
4
Végzetes hiba :
Nem lehet megnyitni a 'licit.be' file -t !

Kilépés a programbol ...


Create a new paste based on this one


Comments: