WEiTI M3 - 2007


#16 2007-04-22 17:28:07

p@weł

Osesek

2233545
Skąd: Płock Podolszyce/Wwa Ochota
Zarejestrowany: 2007-03-29
Posty: 38
Punktów :   
WWW

Re: Projekt PRM

wkurwiłem sie troche wiec napisalem od prawie ze poczatku caly program. przejrzałem cały internet (i to ze dwa razy ^^ haha) i oto efekty mojej dzialanosci z google i tworczosci wlasnej

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

void NAGLOWEK()
{
   printf("################################################\n");
   printf("#Program do rozwiązywania maksymalnie 5 równań #\n");
   printf("#           liniowych metodą Gaussa            #\n");
   printf("#                                              #\n");
   printf("#                           autor: Paweł Bożyk #\n");
   printf("################################################\n");
}

void ENTER(void)
{
   while(getchar()!='\n');
}


int ILOSC(char *tekst)
{
   int ile;
   printf(tekst);
   while(scanf("%d", &ile)!=1 || ile<2 || ile>5)
   {
      ENTER();
      printf("Popełniłeś błąd! Podaj liczbe naturalna z przedzialu 2-5 !\n");
   }
   return ile;
}

float WSPOLCZYNNIK()
{
   float wspolczynnik;
   while(scanf("%f", &wspolczynnik)!=1)
   {
      ENTER();
      printf("Popełniłeś błąd! Podaj liczbe!:");
   }
   return wspolczynnik;
}


float WCZYTAJ_WSPOLCZYNNIK(int n)
{
    float wsp;
    float tab_wsp[n][n];
        int i,j;
    for (i=1; i<=n; i++)
        {
        printf("Podaj wspołczyniki w równaniu %d:\n",i);
        for(j=1;j<=n;j++)
            {
            printf("Podaj wspolczynnik przy x%d:",j);
            wsp=WSPOLCZYNNIK();
            printf("\npodales%f\n",wsp);
            tab_wsp[i][j]=wsp;
            };
        printf("Podaj wyraz wolny:");
        wsp=WSPOLCZYNNIK();
        tab_wsp[i][0]=wsp;
        printf("\n\n");
        };
printf("Oto twoje równania:\n");
   for (i=1; i<=n; i++)
  {   printf("równanie %d: ",i);
      for (j=1; j<=n; j++)
          {
      printf("%f * x%d",tab_wsp[i][j],j);
          if (i<n) printf(" + ");
      };
      printf("= %f\n",tab_wsp[i][0]);}
}


main()

   int n;
   NAGLOWEK();
   n=ILOSC("Podaj ilosc równan (od 2 do 5):");
   printf("Program wykona obliczenia dla %d równań!\n",n);   
   WCZYTAJ_WSPOLCZYNNIK(n);
   return 0;
   
}


Wasza nienawiść umacnia naszą wiarę
HOOLIGANS
Aby zostać kimś,najpierw musisz pozostać sobą

Offline

 

#17 2007-04-23 08:01:18

Dziedzic

Niemowa

2315676
Zarejestrowany: 2007-03-20
Posty: 7
Punktów :   

Re: Projekt PRM

wrzuce wam moj program z opornikami
warunki mi wszystkie dzialaja tylko funkcji nie mam.

/* Autor: Michal Dziedzicki
   Program sluzy do wyznaczania oporu zastepczego dla podanego schematu
   Program odrzuca niepoprawne dane wejsciowe takie jak: liczby ujemne, litery, znaki
   Program pomija przy wczytywaniu zbedne znaki ktore moga byc przypadkowo wpisane (np. "56h" jest odczytywane jako "56",
   "123.124.321" jest wczytywane jako "123.124")
*/

//Wczytanie potrzebnych bibliotek:
#include <stdio.h>
#include <stdlib.h>
#include <float.h>

// Zainicjowanie funkcji "main"
int main(void)

{
// Zadeklarowanie zmiennych:
  float r1,r2,r3,r4,r5,r6,R1,RR;
  char syf;
 
// Wypisanie schemtu dla ktorego ma byc wyznaczony opor zastepczy: 
      printf("Program wyznacza opor zastepczy dla podanego schematu: \n");
      printf(" \n");
      printf("          +------r4------+\n");
      printf("          |              |\n");
      printf("       ---+--r1--r2--r3--+---r5--r6---\n");
      printf(" \n");

// Prosba o wprowadzenie pierwszej danej:     
printf("Wprowadz wartosc pierwszego oporu: ");
         

// Przeprowadzenie walidacji danych wejsciowych: 
          while (scanf("%f", &r1) == 0 || r1<0 || r1>=FLT_MAX )
          {
// Sprawdzenie czy zmienna miesci sie w zakresie "float"
          if (r1>=FLT_MAX)
                   {
                          printf("\rLiczba jest spoza zakresu! ");
                   r1=0;
                   }
// Sprawdzenie czy zmienna jest ujemna                   
          else
          if (r1<0)
             {

                   printf("Wartosc oporu musi byc dodatnia!!! Wprowadz jeszcze raz! ");
                   r1=0;
             }
// Sprawdzenie czy zmienna jest liczba
                   else
                       if (scanf("%f", &r1) == 0)
                        {
                        scanf("%*s");
                        printf("\rNalezy wprowadzic liczbe!!! ");
                        r1=0;

                        }
             }
// Pominiecie wszystkich zbednych znakow             
          do
              {
                   syf = getchar();
              }
                    while (syf!= '\n');
                   
                   
// Dla kolejnych pieciu danych kod programu wyglada analogicznie         
printf("Wprowadz wartosc drugiego oporu: ");


          while (scanf("%f", &r2) == 0 || r2<0 || r2>=FLT_MAX )
          {
          if (r2>=FLT_MAX)
                   {
                          printf("\rLiczba jest spoza zakresu! ");
                   r2=0;
                   }
         
          else
          if (r2<0)
             {

                   printf("Wartosc oporu musi byc dodatnia!!! Wprowadz jeszcze raz! ");
                   r2=0;
             }
             
                   else
                       if (scanf("%f", &r2) == 0)
                       {
                       scanf("%*s");
                       printf("\rNalezy wprowadzic liczbe!!! ");
                       r2=0;

                       }
             }
          do
             {
                   syf = getchar();
             }
                    while (syf!= '\n');
                   
         
printf("Wprowadz wartosc trzeciego oporu: ");


          while (scanf("%f", &r3) == 0 || r3<0 || r3>=FLT_MAX )
          {
          if (r3>=FLT_MAX)
                   {
                          printf("\rLiczba jest spoza zakresu! ");
                   r3=0;
                   }
          else
          if (r3<0)
             {

                   printf("Wartosc oporu musi byc dodatnia!!! Wprowadz jeszcze raz! ");
                   r3=0;
                                     }
                   else
                   if (scanf("%f", &r3) == 0)
                   {
                   scanf("%*s");
                   printf("\rNalezy wprowadzic liczbe!!! ");
                   r3=0;

                   }
              }
          do
          {
                   syf = getchar();
          }
                    while (syf!= '\n');
         
         
printf("Wprowadz wartosc czwartego oporu: ");


            while (scanf("%f", &r4) == 0 || r4<0 || r4>=FLT_MAX )
            {
            if (r4>=FLT_MAX)
                   {
                            printf("\rLiczba jest spoza zakresu! ");
                   r4=0;
                   }
                   else
                   if (r4<0)
            {

                   printf("Wartosc oporu musi byc dodatnia!!! Wprowadz jeszcze raz! ");
                   r4=0;
                                     }
                   else
                   if (scanf("%f", &r4) == 0)
                   {
                   scanf("%*s");
                   printf("\rNalezy wprowadzic liczbe!!! ");
                   r4=0;

                   }
             }
          do
          {
                   syf = getchar();
          }
                    while (syf!= '\n');       
                   
                   
printf("Wprowadz wartosc piatego oporu: ");


            while (scanf("%f", &r5) == 0 || r5<0 || r5>=FLT_MAX )
            {
            if (r5>=FLT_MAX)
                   {
                            printf("\rLiczba jest spoza zakresu! ");
                   r5=0;
                   }
                   else
                   if (r5<0)
            {

                   printf("Wartosc oporu musi byc dodatnia!!! Wprowadz jeszcze raz! ");
                   r5=0;
            }
                   else
                   if (scanf("%f", &r5) == 0)
                   {
                    scanf("%*s");
                    printf("\rNalezy wprowadzic liczbe!!! ");
                    r5=0;
                   }
            }
          do
          {
                   syf = getchar();
                    }
                    while (syf!= '\n');       
                   
                   
printf("Wprowadz wartosc szostego oporu: ");


            while (scanf("%f", &r6) == 0 || r6<0 || r6>=FLT_MAX )
            {
            if (r6>=FLT_MAX)
                   {
                            printf("\rLiczba jest spoza zakresu! ");
                   r6=0;
                   }
                   else
                   if (r6<0)
            {

                   printf("Wartosc oporu musi byc dodatnia!!! Wprowadz jeszcze raz! ");
                   r6=0;
                                     }
                   else
                   if (scanf("%f", &r6) == 0)
                   {
                   scanf("%*s");
                   printf("\rNalezy wprowadzic liczbe!!! ");
                   r6=0;
                   }
             }
          do
          {
                   syf = getchar();
                    }
                    while (syf!= '\n');
                   
// Unikniecie dzielenia przez "0"         
      if (r1+r2+r4+r3==0)
         
      R1=0;
// Wyznaczenie wartosci oporu zastepczego         
      else
          R1=((r1+r2+r3)*r4)/(r1+r2+r3+r4);
         
          RR=R1+r5+r6;
// Wypisanie wyniku
          printf("\n");
          printf("Opor zastepczy wynosi: %f \n", RR);
          printf("\n");
// Wykluczenie mozliwosci wylaczenia sie programu przed odczytaniem wyniku         
          system("PAUSE");
          return(0);
}
// KONIEC

Offline

 

#18 2007-04-23 21:27:31

ArtekF

Wstydniś

4005108
Zarejestrowany: 2007-03-19
Posty: 19
Punktów :   -2 

Re: Projekt PRM

ja Wam wkleje mój i prosze (kumatych:D) o poprawienie błędów w nim ...program liczy liczbę PI metodą monte-carlo....(program nie chce  liczyć N1-liczba pkt wylosowanych, ktore znajdują sie w kole; chociaz sama funkcja wyszukujaca te pkt  jako oddzielny program liczy liczbe N1, a połączona w całosc nie chce;/ no i nie wiem czemu ale cos z formatem textu wypiswyanego jest nie tak bo nie chce mi wyswietlac liczby PI...
kod źrodlowy
#include<stdio.h>
#include<stdlib.h>
double N, N1=0;
#define R 1

int liczba(void);

main()
{
      int i;
       
        float s;
        float PI;
        printf("Jest to program liczacy liczbe PI metoda Monte-Carlo\n");
        printf("Podaj N - liczbe punktow w kwadracie(najlepiej powyżej 10tys)\n");
        scanf("%d", &N);
                liczba();
        printf("Liczba N1=%d punktow\n", N1);       
       
        for(i=1; i<10; i++)
        {
       
        s=N1/N;
        PI=4*s;
        printf("Liczba PI w %d losowaniu wynosi PI=%.7f\n", i, PI);
        }
        system("PAUSE");
      return 0;
}
       int liczba()
       {
           
           
           int i;
           float x, y;
           for(i=1; i<N; i++)
           {
                    if(sqrt((double)x*x+y*y)<R) N1++;
              x = ((double) rand()/(float)(RAND_MAX+1.0));
              y =((double) rand()/(float) (RAND_MAX+1.0));
             
               }
               return N1;
                            }

Prosze o szybką pomoc


KKS CZUWAJ PRZEMYŚL
            (h)

Offline

 

#19 2007-04-23 21:32:04

ArtekF

Wstydniś

4005108
Zarejestrowany: 2007-03-19
Posty: 19
Punktów :   -2 

Re: Projekt PRM

albo drugi wariant tego niedkoskonałego jesczze programu...ale z Waszą pomocą kto wie
#include<stdio.h>
#include<stdlib.h>

#define R 1



main()
{
      int i, k;
        double N, N1, x, y;
        float s;
        float PI;
        printf("Jest to program liczacy liczbe PI metoda Monte-Carlo\n");
        printf("Podaj N - liczbe punktow w kwadracie(najlepiej powyżej 10tys)\n");
        scanf("%d", &N);
               
          for(i=1; i<10; i++)
        {     
       
       
               for(k=1; k<N; k++)
           {
               N1=0;
                   if(sqrt((double)x*x+y*y)<R) N1++; 
              x = ((double) rand()/(float)(RAND_MAX+1.0));
              y =((double) rand()/(float)(RAND_MAX+1.0));
                       
               } 
               printf("N1=%d\n", N1);
       
        s=N1/N;
        PI=4*s;
        printf("Liczba PI w %d losowaniu wynosi PI=%.7f\n", i, PI);
        }
        system("PAUSE");
      return 0;
}


KKS CZUWAJ PRZEMYŚL
            (h)

Offline

 

#20 2007-04-23 21:35:08

p@weł

Osesek

2233545
Skąd: Płock Podolszyce/Wwa Ochota
Zarejestrowany: 2007-03-29
Posty: 38
Punktów :   
WWW

Re: Projekt PRM

KURWA ;/ JA PIERDOLE ;/ W PIZDU ... NO JEBANE:/ WIE KTOS COS O METODZIE (ELIMINACJI) GAUSSA ???;/;/;/;/;/ kurwa


Wasza nienawiść umacnia naszą wiarę
HOOLIGANS
Aby zostać kimś,najpierw musisz pozostać sobą

Offline

 

#21 2007-04-23 21:53:49

Wojtek

Osesek

3389801
Skąd: DS Riviera - 711b
Zarejestrowany: 2007-03-20
Posty: 28
Punktów :   

Re: Projekt PRM

http://pl.wikipedia.org/wiki/Metoda_eliminacji_Gaussa - proszę

I jeszcze taki mały request: jeżeli ktoś ma już gotową dokumentację nie mógłby się nią podzielić? Potrzebuję mieć coś na wzór, bo mam średnie pojęcie o tym, jak to ma wyglądać.

Offline

 

#22 2007-04-23 22:01:56

ArtekF

Wstydniś

4005108
Zarejestrowany: 2007-03-19
Posty: 19
Punktów :   -2 

Re: Projekt PRM

Ty nie myśl o dokumentacji tylko o moim programie a tak poważnie mi tez by sie przydał taki wzorek w razie gdybym oddał prace w pore


KKS CZUWAJ PRZEMYŚL
            (h)

Offline

 

#23 2007-04-23 22:02:44

doman

Osesek

Zarejestrowany: 2007-03-22
Posty: 25
Punktów :   

Re: Projekt PRM

ile stron zajmuje Wasza dokumentacja?

Offline

 

#24 2007-04-23 22:04:41

p@weł

Osesek

2233545
Skąd: Płock Podolszyce/Wwa Ochota
Zarejestrowany: 2007-03-29
Posty: 38
Punktów :   
WWW

Re: Projekt PRM

no dobra fakt na wikipedii jest conieco;/ tylko niech ktos mi to na moj jezyk wytlumaczy:D a jeszcze lepiej na C odrazui ^^


Wasza nienawiść umacnia naszą wiarę
HOOLIGANS
Aby zostać kimś,najpierw musisz pozostać sobą

Offline

 

#25 2007-04-24 00:20:49

chriss

Wstydniś

9597613
Skąd: RIVIERA
Zarejestrowany: 2007-03-26
Posty: 18
Punktów :   

Re: Projekt PRM

Tutaj są przykładowe wzory specyfikacji <ze strony Podgórskiego, a chyba bardziej Arabasa, tylko link jest u Podgórskiego i co dziwne DZIAŁA!!!!!!>


http://elektron.elka.pw.edu.pl/~jarabas … pecfun.pdf

http://elektron.elka.pw.edu.pl/~jarabas … ectech.pdf


***być zagadką, której nie zgadnie nikt nim minie czas***

Offline

 

#26 2007-04-24 00:47:55

p@weł

Osesek

2233545
Skąd: Płock Podolszyce/Wwa Ochota
Zarejestrowany: 2007-03-29
Posty: 38
Punktów :   
WWW

Re: Projekt PRM

Kurwa jestem pojebany 10 godzin do konca a ja wywalczyłem

/* gauss.c -- gaussian elimination */
#include <stdio.h>
#include <stdlib.h>
#define Zamien( x, y ){double t; t = x; x = y; y = t;}
#define MAX 5

int Czytaj(double [][MAX+1], const int);
void gauss(double [][MAX+1], double [], const int);
void Wyswietl(double [], const int);


int naglowek()
{
   printf("################################################\n");
   printf("#Program do rozwiązywania maksymalnie 5 równań #\n");
   printf("#           liniowych metodą Gaussa            #\n");
   printf("#                                              #\n");
   printf("#                           autor: Paweł Bożyk #\n");
   printf("################################################\n");
}


void enter(void)
{
   while(getchar()!='\n');
}

int Czytaj(double a[][MAX+1], const int limit)
{void ENTER(void)
{
   while(getchar()!='\n');
}
  int n;
  int i,j;
  printf("Wprowadz ilosc równań:\n");
 
  while((scanf("%d", &n))!=1 || n <= 0 || n > (limit))
  {
      ENTER();
      printf("Popełniłeś błąd! Podaj liczbę z przedziału 1 - 5!!\n");
   }
  printf("Wprowadz wspołczynniki w równaniach!.\n");
  for(i = 1; i <= n; i++)
    {
     printf("\nRównanie nr%d:\n",i);
    for(j = 1; j <= n+1; j++)
       {
       if(j<=n) printf("Podaj wspołczynnik przy x%d:   ",j);
       else printf("Podaj wyraz wolny:   ");
       while(scanf("%lf",&a[i][j])!=1)
           {
      ENTER();
      printf("Popełniłeś błąd!Spróbuj jeszcze raz");
       if(j<=n) printf("Podaj wspołczynnik przy x%d:   ",j);
       else printf("Podaj wyraz wolny:   ");
           };   
       printf("\n");
        };
     };

  printf("\n\nMacierz rozszerzona:\n");
  for(i = 1; i <= n; i++)
     {
     printf("| ");
     for (j=1; j <= n+1; j++)
        {
         if(j<=n) printf("%5.2lf   ",a[i][j]);
         else printf("| %5.2lf",a[i][j]);
        }
     printf("|\n");
     }
  return n;
}

void gauss(double a[][MAX+1], double x[MAX], const int n)
{
  int i,j,k,najwieksze;
  double t;
  for(i = 1; i < n; i++){
    for(najwieksze = i, j = i+1; j <= n; j++)
      if(abs( a[i][j] ) > abs( a[najwieksze][i] ))
        najwieksze = j;
    for(k = i; k <= n+1; k++)
      Zamien( a[najwieksze][k], a[i][k]);
    for( j = i+1; j <= n; j++)
      for( k = n+1; k >= i; k--)
        a[j][k] = a[j][k]-a[i][k]*a[j][i]/a[i][i];
  }
  for(i = n; i >= 1; i--){
    for(t = 0, j=i+1; j <= n; j++)
      t = t + a[i][j]*x[j];
    x[i] = (a[i][n+1] - t)/a[i][i];
  }
}

void Wyswietl(double x[MAX], const int n)
{
  int i;



  printf("\n\n");
  for(i = 1; i <= n; i++){
    printf("x[%d] = %5.2lf  ",i,x[i]);
    if( i%3 == 0 ) printf("\n");
  }
  if( i%3 != 1) printf("\n");
}

int main(void)
{
  double a[MAX][MAX+1];
  double x[MAX];
  int n;
  naglowek();
  n = Czytaj(a, MAX);
  gauss(a, x, n);
  Wyswietl(x, n);
}


Wasza nienawiść umacnia naszą wiarę
HOOLIGANS
Aby zostać kimś,najpierw musisz pozostać sobą

Offline

 

#27 2007-04-24 01:42:07

omel

Nowicjusz

6655340
Skąd: Brzeziny
Zarejestrowany: 2007-03-20
Posty: 53
Punktów :   

Re: Projekt PRM

Moj zajebisty projekt(wlasnie skonczylem pisac...) - jak sie komus przyda o tej porze to prosze bardzo ;-)

Kod:

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

#define PLIK	"wynik.txt"	// nazwa pliku z wynikami
#define KULA	1
#define WALEC	2
#define DOKL	10000	// dokladnosc losowania liczby zmiennoprzecinkowej
#define MINITER	1000	// minimalna liczba iteracji
#define MAXITER	30000	// max liczba iteracji

/* Punkt(x,y,z) w przestrzeni */
typedef struct{
	float x, y, z;
}punkt; 
/******************************************************************************/

/*	
	Oblicza wymiary prostopadloscianu opisanego na podanej bryle 
	bryla - 		rodzaj bryly(KULA lub WALEC)
	dla kuli r - 	promien
	dla walca r - 	promien, h - wysokosc
*/
punkt wym_ppscian(char bryla, float r, float h)
{
	punkt p;
	
	if(bryla == KULA)
	{	
		p.x = p.y = p.z = 2*r;
		return p;	
	}
	else
	{
		p.x = p.y = 2*r;
		p.z = h;
		return p;
	}
}
/******************************************************************************/

/*	
	Sprawdza czy punkt nalezy do bryly(kuli lub walca)
	Zwraca 1, gdy nalezy
	Zwraca 0, gdy nie nalezy
	bryla - 		rodzaj bryly(KULA lub WALEC)
	dla kuli r - 	promien
	dla walca r - 	promien, h - wysokosc
	p - 			punkt
*/
int sprawdz_punkt(char bryla, float r, float h, punkt p)
{
	float l;	// kwadrat odleglosci od srodka kuli(kola)
	
	if(bryla == KULA)
	{
		l = (p.x-r)*(p.x-r) + (p.y-r)*(p.y-r) + (p.z-r)*(p.z-r);
	}	
	else
	{
		// wspolrzedna p.z zawsze nalezy do walca - sprawdzamy tylko
		// podstawe
		l = (p.x-r)*(p.x-r) + (p.y-r)*(p.y-r);
	}
	if(l <= (r*r))
			return 1;
	return 0;
}
/******************************************************************************/

/*
	Losuje liczbe zmiennoprzecinkowa <0-zakres>
	zakres	-		zakres losowania
*/
float frand(float zakres)
{
	int d, rd;		// czesc calkowita, wylosowana cz. calk.     
	float f, rf;	// czesc ulamkowa, wylosowana cz. ul.
	
	d = (int)zakres;
	f = zakres - d;
	
	// zeby losowac tez wartosci dla zakresu = liczba calkowita
	if(f == 0) 
	{
		d <= -1 ? d = 0 : d --;
		f = 1.0;
	}
	
	// losujemy czesc calkowita
	rd = rand()%(d+1);
	
	// losujemy czesc ulamkowa
	while((rf = rand()%(DOKL+1) / (float)DOKL)> f) {}
	
	return (rf+rd);
}
/******************************************************************************/


/*
	Losuje wspolrzedne punktu zawartego w prostopadloscianie
	ppscian	-		prostopadloscian
*/
punkt losuj_punkt(punkt ppscian)
{
	punkt p;
	p.x = frand(ppscian.x);
	p.y = frand(ppscian.y);
	p.z = frand(ppscian.z);
	
	return p;	
}
/******************************************************************************/

/*
	Wczytuje zmienna typu float wieksza od zera. Zawiera obsluge bledow.
	Zwraca wczytana liczbe.
*/
float wczytaj_float()
{
	float f;
	int flaga = 1; // warunek wyjscia z petli = 0
	
	while(flaga)
	{
		// jesli uzytkownik wpisal litere(-y) lub liczbe <=0
		if(!scanf("%f", &f) || (f <= 0))
		{
			printf("Mozesz podac TYLKO LICZBE wieksza od zera z zakresu float: ");
			fflush(stdin); 
		}
		else
			flaga = 0; // wszystko OK - wychodzimy z petli
	}
	
	return f;
}
/******************************************************************************/

/*
	Wczytuje zmienna typu int >= MINITER. Zawiera obsluge bledow.
	Zwraca wczytana liczbe.
*/
int wczytaj_int()
{
	int d;
	int flaga = 1; // warunek wyjscia z petli = 0
	
	while(flaga)
	{
		// jesli uzytkownik wpisal litere(-y) lub liczbe <=0
		if(!scanf("%d", &d) || (d < MINITER) || (d > MAXITER))
		{
			printf("Mozesz podac TYLKO LICZBE calkowita (%d-%d> ", MINITER, MAXITER);
			fflush(stdin); 
		}
		else
			flaga = 0; // wszystko OK - wychodzimy z petli
	}
	
	return d;
}
/******************************************************************************/







int main(int argc, char *argv[])
{
	FILE *f;			// plik w ktorym bedziemy zapisywac wyniki
	punkt ppscian;		// wymiary prostopadloscianu
	float r = 0;		// promien kuli lub walca
	float h;			// wysokosc walca
	char bryla = 0;		// rodzaj bryly
	int iter = 0;		// liczba interakcji 
	int traf = 0;		// liczba trafionych punktow
	int i;			
	
	srand(time(0));		// inicjacja generatora licz pseduolosowych
	
	printf("Witaj w programie Monte Carlo!!!\n");
	printf("Wybierz bryle, ktorej objetosc chcesz obliczyc:\n");
	printf("[K]ula\n[W]alec\n");
	while(!bryla)
	{
		printf("Wpisz K dla kuli lub W dla walca: ");
		
		// jesli trafi sie jakis dziwny blad
		if(!scanf("%c", &bryla))
		{
			printf("\nNieznany blad wejscia.\n");
			return -1;	
		}
		// czyscimy bufor klawiatury zeby nie czytac dalszych znakow w linii
		fflush(stdin);
		switch(bryla)
		{
			case 'K':		// wielkosc litery bez znaczenia
			case 'k':
				bryla = KULA;
			break;
			
			case 'W':
			case 'w':
				bryla = WALEC;
			break;
			
			default:
				bryla = 0;		// bo wtedy !bryla = TRUE => petla sie kreci dalej
		}
	}
	
	if(bryla == KULA)
	{
		printf("OK - program obliczy objetosc kuli.\nPodaj promien kuli: ");
		r = wczytaj_float(); // wczytujemy promien
	}
	else	// czyli walec
	{
		printf("OK - program obliczy objetosc walca.\nPodaj promien podstawy: ");
		r = wczytaj_float(); // wczytujemy promien podstawy
		
		printf("Podaj wysokosc: ");
		h = wczytaj_float(); // ... i wysokosc
	}
	
	// wczytujemy liczbe iteracji
	printf("Podaj liczbe punktow do losowania(%d-%d>: ", MINITER, MAXITER);
	iter = wczytaj_int();
	
	// opisujemy prostopadloscian na bryle
	ppscian = wym_ppscian(bryla, r, h);
	
	// otwieramy plik
	if((f = fopen(PLIK, "w")) == NULL)
	{
		printf("BLAD!!! Nie mozna utworzyc pliku %s\n", PLIK);
		return -1;
	}
	
	// losujemy i sprawdzamy czy kolejne iter punktow zawiera sie w bryle
	for(i = 0; i < iter; i ++)
	{
		if(sprawdz_punkt(bryla, r, h, losuj_punkt(ppscian)))
			traf ++;
		// zapisujemy wyniki co 100
		if((i % 100 == 0) && i)
			fprintf(f, "%d %d\n", i, traf);
		
	}
	
	// zamykamy plik
	fclose(f);
	
	// wyprowadzenie wyniku na ekran
	if(bryla == KULA)
		printf("\nObjetosc kuli wynosi: %g\n", (float)traf/iter*ppscian.x*ppscian.y*ppscian.z);
	else if(bryla == WALEC)
		printf("\nObjetosc walca wynosi: %g\n", (float)traf/iter*ppscian.x*ppscian.y*ppscian.z);
	
    return 0;
}

Offline

 

#28 2007-04-24 01:50:20

Wojtek

Osesek

3389801
Skąd: DS Riviera - 711b
Zarejestrowany: 2007-03-20
Posty: 28
Punktów :   

Re: Projekt PRM

A o to mój projekt, również przed chwilą skończony. Zapewne zawiera jakieś-tam błędy, aale...
Teraz dokumentacja

Kod:

#include <stdio.h>
#include <math.h>
#define ERRMSG if (spr==0) printf("   Blad: Dane nie mieszcza sie w zadanym zakresie\n   badz tez nie mozna ich zinterpretowac jako liczbe.\n\n   Wprowadz dane ponownie:\n")

double edox(float x, float dokl)
    {
    double edox=0,wyraz=0;
    float silnia=0;
    int n=0, ujemny;

    ujemny=0;                                          
    if (x<0)                                           //obsługa ujemnych x-ow
       {ujemny=1; 
        x=fabs(x); }                                   //wyznaczanie modulu
    
      while (n>=0)                                     // warunek na n zabezpieczeniem na wypadek przekroczenia zakresu zmiennej n
        {
        if (n==0) 
           { edox=1; n++; silnia=1; }                  //pomijanie zbednych obliczeń
      
             silnia*=n;
             wyraz=(pow(x,n))/silnia;                  //wyliczanie (kolejnego) wyrazu szeregu potegowego
             if (wyraz<((edox+wyraz)*(1-(dokl/100))))  //uzycie wyrazu do sprawdzenia czy wynik osiagnal juz pozadana dokladnosc (realizowane za pomoca wzoru na reszte Lagrange'a)
                                               break;  //jezeli tak, potraktowanie wyrazu jako wyraz (n+1), a wiec potraktowanie dotychczas wyliczonej zmiennej edox jako wyniku funkcji 
             edox+=wyraz;                              //jezeli nie, kontynuowanie wyliczania edox
             n++;
        }
        
        if (ujemny==1) return (1/edox);                //w przypadku gdy x byl ujemny zwracama jest wartosc 1/e^|x|
        return edox;               

     }

int main(void)
{


    float x, dokl=0, xp, xk, krok;
    double wynik;
    int spr=1;
    
     printf(" ***************PROJEKT*1***************\n * Program liczacy wartosc funkcji e^x *\n * przy podanym zakresie zmiennosci x  *\n *                                     *\n *  wykonanie: Wojciech Michalczuk 1M3 *    \n ***************************************\n\n");     
     printf("Program ten przybliza funkcje e^x korzystajac z wzoru Taylora.\n");
     printf("Maksymalna dokladnosc przyblizen to 99.999995 procent.\n");
     printf("Dane mozna wprowadzac zarowno w notacji dziesietnej, jak i wykladniczej.\n");
     printf("W nawiasach kwadratowych podano typ wymagany danych\n\n");
     printf("Wprowadz dane:\n");
    
    /* wprowadzanie danych oraz ich weryfikacja */
    do                                                       
        { 
           spr=1;                                            //warunek wyjscia - stan domyslny
           fflush(stdin);
           printf("Dokladnosc przyblizenia [w procentach, zakres od 0 do 99.999995]:  ");           
           if(!scanf("%f", &dokl)) spr=0;                    //wyzerowanie warunku wyjscia w przypadku wpisania ciagu znakow nieakceptowalnych przez formatke %f
           if ((dokl<=0) ||  (dokl>=99.999995)) spr=0;       //sprawdzanie zakresu
           ERRMSG;                                           //wyprowadzenie komunikatu o bledzie
        }
    while (spr==0);
  
  
    do     
        { 
           spr=1;
           fflush(stdin);
           printf("Dolna granica zmiennej x [liczba rzeczywista] : ");           
           if(!scanf("%f", &xp)) spr=0;
           ERRMSG;           
         }
    while (spr==0);
  
    do     
        { 
           spr=1;
           fflush(stdin);
           printf("Gorna granica zmiennej x [liczba rzeczywista] : ");           
           if(!scanf("%f", &xk)) 
                           {spr=0; ERRMSG;}
           if (xk<xp)
                     {
                      spr=0; 
                      printf("   Blad: Gorna granica zmiennej nie moze byc mniejsza od dolnej granicy.\n\n");
                     }                     
         }
    while (spr==0);
    
    do     
        { 
           spr=1;
           fflush(stdin);
           printf("Krok z jakim powiekszana jest wartosc x [dodatnia liczba rzeczywista] : ");
           
           if(!scanf("%f", &krok)) 
                           {spr=0; ERRMSG;}
           if (krok<=0)
                     {
                      spr=0; 
                      printf("   Blad: Krok nie moze byc zerem ani liczba ujemna.\n\n");
                     }                                
         }
    while (spr==0);
    
    
    /* wyprowadzanie wyniku działania programu*/
    printf("\nWartosc x:              Wartosc funkcji e^x:\n");
    for (x=xp; x<xk; x+=krok)
        {
        printf("%10.8g    %27.25g\n",x,edox(x,dokl)); //wyliczanie e^x za pomoca funkcji "edox(x)"
        }
        
    printf("%10.8g    %27.25g\n",xk,edox(xk,dokl)); //wyliczanie e^xk, z uwagi na to, ze (xk-xp) nie musi byc podzielne przez krok


getchar();
getchar();
        
  return 0;
}

Ostatnio edytowany przez Wojtek (2007-04-24 02:24:24)

Offline

 

#29 2007-04-24 08:28:08

Wojtek

Osesek

3389801
Skąd: DS Riviera - 711b
Zarejestrowany: 2007-03-20
Posty: 28
Punktów :   

Re: Projekt PRM

Gdyby się komuś przydało:
http://elka.mine.nu/attach/download.php?fid=219 wygrzebany na elka.mine.nu przykładowy projekt, za który autor dostał max u niewińskiego. Co ważniejsze - jest tam również dokumentacja!

Do korzystania zapewne potrzebne jest konto na elka.mine.nu, ale zakładam że wszyscy mają - przecież bez tego się nie da zaliczyć pomów :>

Offline

 

#30 2007-05-10 16:43:06

omel

Nowicjusz

6655340
Skąd: Brzeziny
Zarejestrowany: 2007-03-20
Posty: 53
Punktów :   

Re: Projekt PRM

Wojtek a moglbys wrzucic swoja dokumentacje do projektu I? Bo ty masz z Niewinskim i z tego co pamietam to maxa dostales ;-)

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.trojporozumienie.pun.pl www.colobot.pun.pl www.magiawyobrazni.pun.pl www.dragonslayers.pun.pl www.g3wclan.pun.pl