⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vektor.cpp

📁 java fuzzy cmeans code
💻 CPP
字号:
// Vektor.cpp: Implementierung der Klasse CVektor.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include "Vektor.h"

/*
	Author		: Bernd Allmendinger
	Date		: 14.02.2000
	e-mail		: webmaster@neurocomputing.de
	homepage	: www.neurocomputing.de
	Version		: 1.0
*/

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CVektor::CVektor()
{ nl=nh=0;
  dim = 0;
  wert = 0;
}

CVektor::~CVektor()
{ 
  if (wert)
  { 
	delete [] (wert+nl);  
	// delete [] wert;
    wert = 0;
  }
  dim = 0;
  nl=nh=0;
}

void CVektor::operator=(CVektor & a)
{ int i;

   // Wenn dim des vektors Null ist, dann erst speicher allocieren
   if (dim == 0)
   { setDim(a.nl, a.nh);
   }
   
   if (dim == a.getDim())
   {  for (i=nl; i < nh; i++)
		wert[i] = a.wert[i];
   }
}



int CVektor::entfernen_zeile(double Zahl)          /*
---------------------------------------------------------------         */
{ /* n = Dimension von Array (anzahl der Elemente) a[0..n-1] ---> dimension n
  z.B zahl = 0
  Rueckgabe: neue dimension des arrays a
  Beginnt von index Null und entfernt die zellen die Null enthalten in dem die 
  werte ungleich Null aufschliesen.

  Beispiel: Eingabe: a[0]=3, a[1]=0,a[2]=0,a[3]=11,a[4]=6,a[4]=0; Dimension n = 6
            Nach bedingung der procedure:
                      a[0]=3, a[1]=11,a[2]=6,a[3]=0,a[4]=0,a[4]=0; Dimension n = 3
  */
  int i, k;

  // Suchen der ersten Null im array a
  for (k=nl; k <= nh && wert[k] != Zahl; k++) ;
  i=0;
  while (k <= nh && i <= nh)
  { for (i=k; i <= nh && wert[i] == Zahl; i++) ;
    
     if (i < dim)
	 { wert[k]=wert[i];
	   k++;
	   wert[i]=Zahl;
	 }
  }

  // Berechnen der neuen Dimension
  for (k=nl; k <= nh && wert[k] != Zahl; k++) ;
  return (k);


}




int CVektor::getDim()
{  
   return(dim);
   
}

int CVektor::setDim(int unl, int unh)
{ int i;

    nl=unl; 
	nh=unh;

	if (dim == 0)
	{	dim = unh-unl+1;
		wert=new double[dim];
		wert -= nl;
		if (wert==NULL) 
			return(NOSPEICHER);
		// return wert-nl;
		for (i=nl; i <= nh; i++)
		wert[i] = 0;
		
/*		
		dim = n;  
		wert = new double [dim];  
		if (wert == NULL) return(NOSPEICHER);
		for (i=0; i < dim; i++)
		wert[i] = 0;
*/
	}

	return(OK);
}

void CVektor::init(double initwert)
{ int i;

  for (i=nl; i <= nh; i++)
	wert[i] = initwert;
}

void CVektor::printWerte()
{ int i;
  
  printf("\nWerte von Vektor mit dim %d :\n", dim);

  for (i=nl; i <= nh; i++) printf(" %4.3f", wert[i]);

  printf(";\n");
}

void CVektor::fprintWerte(char* fname)
{ int i;
  FILE* pro;

  if (!(pro = fopen(fname, "w")))
  { return;
  }
  fprintf(pro, "\nWerte von Vektor mit dim %d :\n", dim);

  for (i=nl; i <= nh; i++) fprintf(pro, "%4.3f\n", wert[i]);

  fclose(pro);
}

double CVektor::sum()
{ int i;
  
  double dsum = 0.0;
  for (i=nl; i <= nh; i++) dsum += wert[i];

  return(dsum);
}


double CVektor::betrag()
{ int i;
 
  double bet = 0.0;
  for (i=nl; i <= nh; i++) 
	  bet += wert[i]*wert[i];

  return(sqrt(bet));
}


double CVektor::mittelwert()
{ 
  double dsum = sum();

  if (dim > 0)
    return(dsum/dim);
  else
	return(0.0);
}

double CVektor::vmax(int* index)
{ int i;
  double maxwert;
  
  maxwert= -MAXREAL;
  for (i=nl; i <= nh; i++) 
	 if (wert[i] > maxwert)
	 { maxwert = wert[i];
	   *index = i;
	 }

  return(maxwert);
}

double CVektor::vmin(int* index)
{ int i;
  double minwert;
  
  minwert= MAXREAL;
  for (i=nl; i <= nh; i++) 
	 if (wert[i] < minwert)
	 { minwert = wert[i];
	   *index = i;
	 }

  return(minwert);
}
//////////////////////////////////////////////////////////////////////
// CVektorInt Klasse
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
// Konstruktion/Destruktion
//////////////////////////////////////////////////////////////////////

CVektorInt::CVektorInt()
{ dim = 0;
  wert = 0;
}

CVektorInt::~CVektorInt()
{ if (wert)
  { delete [] wert;
    wert = 0;
  }
  dim = 0;
}


void CVektorInt::operator=(CVektorInt & a)
{ int i;

   // Wenn dim des vektors Null ist, dann erst speicher allocieren
   if (dim == 0)
   { setDim(a.getDim());
   }
   
   if (dim == a.getDim())
   {  for (i=0; i < dim; i++)
		wert[i] = a.wert[i];
   }
}


int CVektorInt::entfernen_zeile(int Zahl)        /*
---------------------------------------------------------------         */
{ /*
  z.B zahl = 0
  n = Dimension von Array (anzahl der Elemente) a[0..n-1] ---> dimension n
  Rueckgabe: neue dimension des arrays a
  Beginnt von index Null und entfernt die zellen die Null enthalten in dem die 
  werte ungleich Null aufschliesen.

  Beispiel: Eingabe: a[0]=3, a[1]=0,a[2]=0,a[3]=11,a[4]=6,a[4]=0; Dimension n = 6
            Nach bedingung der procedure:
                      a[0]=3, a[1]=11,a[2]=6,a[3]=0,a[4]=0,a[4]=0; Dimension n = 3
  */
  int i, k;

  // Suchen der ersten Null im array a
  for (k=0; k < dim && wert[k] != Zahl; k++) ;
  i=0;
  while (k < dim && i < dim)
  { for (i=k; i < dim && wert[i] == Zahl; i++) ;
    
     if (i < dim)
	 { wert[k]=wert[i];
	   k++;
	   wert[i]=Zahl;
	 }
  }

  // Berechnen der neuen Dimension
  for (k=0; k < dim && wert[k] != Zahl; k++) ;
  return (k);


}

int CVektorInt::finde(int start, int suchwert)					/*
------------------------------------------------------------------------			*/
{ /* sucht den wert "wert" im array a und liefert die Position 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -