|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Yuri Burger 2:468/85.3 18 Jul 2001 22:33:08 To : All Subject : Mild.Faq: 8/9 --------------------------------------------------------------------------------
[ю]ДДДДДДДД Begin 8 ДДДДДДД
long N; // количество пар
IM();
IM(IM *s);
IM(IM& a);
~IM();
void Set(IM *s);
void Clear();
int SetFromStr(char *str);
void sPrint(char *s);
void Sort();
double GetMin();
double GetMax();
int LoadFromFile(const char *filname);
int SaveToFile(const char *filname);
IM operator + (const IM &s); // сложение
IM operator * (const IM &s); // умножение
void Print(); // вывод
Atom *FindAtom(double x); // поиск элемента
void SetAtom(double x,double m); // установить с заменой
void SetAtom(Atom *s);
void NewAtom(double x,double m); // добавить новый
void NewAtom(Atom *s);
// если add==1 то элемент будет создан (объединение)
// если add==0 то не будет создан (пересечение)
void SetMinAtom(double x,double m,char add);
void SetMaxAtom(double x,double m,char add);
IM &operator = (const IM &s);
IM &operator = (const Atom &s);
IM operator | (const IM &s); // объединение
IM operator & (const IM &s); // пересечение
IM operator ! (); // дополнение
IM operator - (const IM &s); // разность
IM operator * (double n); // умнож. на число
};
// модуль LEXAN.CPP
#include "stdafx.h"
#include "LexAn.h"
LexAn::LexAn(char *str){
SrcStr=str;
curpos=0;
};
int LexAn::GetLex(char *resstr){
static char c;
while(1){
switch(SrcStr[curpos++]){
case 0:return(THE_END);
case '{':return(OBRACE_);
case '}':return(CBRACE_);
case '/':return(SLASH_);
case '<':return(LESS_);
case '>':return(MORE_);
case ',':return(COMMA_);
case 9:
case 13:
case 10:
case ' ':break;
default:{
c=SrcStr[curpos-1];
if(((c>='0')&&(c<='9'))||(c=='.')){
static int t;t=0;
do{
resstr[t++]=c;
c=SrcStr[curpos++];
}while(((c>='0')&&(c<='9'))||c=='.');
curpos--;
resstr[t]=0;
//resint=atol(resstr);
return(NUMBER_);
}else
return(ERROR_);
};
};
};
};
int LexAn::GetCurPos(){
return(curpos);
};
// модуль ILIB.CPP
#include "stdafx.h"
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include "ILib.h"
Atom::Atom()
{
X=0;
M=0;
}
Atom::Atom(double x,double m)
{
X=x;
M=m;
}
Atom::Atom(Atom *a)
{
X=a->X;
M=a->M;
}
Atom::~Atom()
{
}
void Atom::Print()
{
printf("<%g/%g>",X,M);
}
IM::IM()
{
A=NULL;
N=0;
}
IM::IM(IM *s)
{
long t;
N=s->N;
A=(Atom **)calloc(N,sizeof(Atom *));
for(t=0;t<N;t++)
{
A[t]=new Atom(s->A[t]);
}
}
IM::IM(IM& a)
{
A=NULL;
N=0;
Set(&a);
};
void IM::Set(IM *s)
{
long t;
if(A!=NULL)
{
for(t=0;t<N;t++)
{
delete A[t];
}
free(A);
}
N=s->N;
A=(Atom **)calloc(N,sizeof(Atom *));
for(t=0;t<N;t++)
{
A[t]=new Atom(s->A[t]);
}
}
IM::~IM()
{
if(A!=NULL)
{
for(long t=0;t<N;t++)
{
delete A[t];
}
free(A);
}
}
void IM::Print()
{
printf("{");
for(long t=0;t<N;t++)
{
A[t]->Print();
if(t!=N-1)printf(",");
}
printf("}");
}
Atom *IM::FindAtom(double x)
{
for(long t=0;t<N;t++)
{
if(A[t]->X==x)return A[t];
}
return NULL;
}
void IM::SetAtom(double x,double m)
{
Atom *a=FindAtom(x);
if(a!=NULL)
{
a->M=m;
}
else
{
N++;
A=(Atom **)realloc(A,N*sizeof(Atom *));
A[N-1]=new Atom(x,m);
}
}
void IM::SetAtom(Atom *s)
{
Atom *a=FindAtom(s->X);
if(a!=NULL)
{
a->M=s->M;
}
else
{
N++;
A=(Atom **)realloc(A,N*sizeof(Atom *));
A[N-1]=new Atom(s);
}
}
void IM::NewAtom(double x,double m)
{
N++;
A=(Atom **)realloc(A,N*sizeof(Atom *));
A[N-1]=new Atom(x,m);
}
void IM::NewAtom(Atom *s)
{
N++;
A=(Atom **)realloc(A,N*sizeof(Atom *));
A[N-1]=new Atom(s);
}
void IM::SetMinAtom(double x,double m,char add)
{
Atom *a=FindAtom(x);
if(a!=NULL)
{
if(a->M>m)a->M=m;
}
else
{
if(add==1)
{
N++;
A=(Atom **)realloc(A,N*sizeof(Atom *));
A[N-1]=new Atom(x,m);
}
}
}
void IM::SetMaxAtom(double x,double m,char add)
{
Atom *a=FindAtom(x);
if(a!=NULL)
{
if(a->M<m)a->M=m;
}
else
{
if(add==1)
{
N++;
A=(Atom **)realloc(A,N*sizeof(Atom *));
A[N-1]=new Atom(x,m);
}
}
}
IM &IM::operator = (const IM &s)
{
long t;
if(A!=NULL)
{
for(t=0;t<N;t++)
{
delete A[t];
}
free(A);
}
N=s.N;
A=(Atom **)calloc(N,sizeof(Atom *));.
[ю]ДДДДДДДД End 8 ДДДДДДД
Kрюгер.
---
* Origin: А хто тут есть, у кого есть за что поесть? (2:468/85.3)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/23173b560ecd.html, оценка из 5, голосов 10
|