Elektronika i Telekomunikacja POLSL
Forum Elektroników Wydziału AEI Politechniki Śląskiej
FAQ  ::  Szukaj  ::  Użytkownicy  ::  Grupy  ::  Galerie  ::  Rejestracja  ::  Profil  ::  Zaloguj się, by sprawdzić wiadomości  ::  Zaloguj


funkcje

 
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr II / PPK
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
kohlet
PRAWIE elektronik - prawie robi...



Dołączył: 26 Paź 2006
Posty: 256
Przeczytał: 0 tematów

Skąd: Łaziskie hałdy

PostWysłany: Wto 13:18, 20 Mar 2007    Temat postu: funkcje

#define _USE_MATH_DEFINES
#include "stdafx.h"
#include <math.h>
#include <stdio.h>


double delta(double a, double b, double c)
{double d;
d=b*b-(4*a*c);
return d;
}
void liniowe(double b, double c)
{
double xl;
xl=-c/b;
printf("Jest to rownanie liniowe, rozwiazaniem jest %lf", xl);

}
void rownanie(double a, double b, double c)
{
double x1, x2;
double d;
d=delta(a,b,c);
if (d<0)
printf("Brak rozwiazan");
else
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
if (x1==x2)
printf("Mamy jeden podwojny pierwiastek %lf", x1);
else printf("Mamy dwa rozwiązania x1= %lf i x2= %lf",x1, x2);
}}
int main()
{
double p1,p2,p3;
printf("Podaj parametry");
scanf("%lf%lf%lf", &p1, &p2, &p3);
if (p1==0)
liniowe(p2,p3);
else
rownanie(p1,p2,p3);

getchar();
getchar();
return 0;
}
Powrót do góry
Zobacz profil autora
staniol
ELEKTRONIK - on już ciągnie druty



Dołączył: 12 Paź 2006
Posty: 387
Przeczytał: 0 tematów

Skąd: Piekary Śl.

PostWysłany: Wto 22:50, 20 Mar 2007    Temat postu:

jakbyscie mogli to napiszcie jakie jeszcze ciekawe funkcje mieliscie do zrobienia :] bylbym wdzieczny Wink pozdro Smile
Powrót do góry
Zobacz profil autora
gorush
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 12 Paź 2006
Posty: 644
Przeczytał: 0 tematów

Skąd: Żory/RE

PostWysłany: Śro 22:05, 21 Mar 2007    Temat postu:

my wszystko z zajęć na forum wrzucamy ;D no albo Kohlet.
Powrót do góry
Zobacz profil autora
kohlet
PRAWIE elektronik - prawie robi...



Dołączył: 26 Paź 2006
Posty: 256
Przeczytał: 0 tematów

Skąd: Łaziskie hałdy

PostWysłany: Czw 22:56, 22 Mar 2007    Temat postu:

Sie gra, sie ma Razz z nudów można coś zawsze wrzucić Smile szczególnie na punktowanych Razz
Powrót do góry
Zobacz profil autora
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów

Skąd: Bytom

PostWysłany: Sob 11:20, 24 Mar 2007    Temat postu:

Dwie funkcje mojego autorstwa do liczenia potęg i pierwiastków dowolnych stopni całkowitych (nie wiem czy w najbardziej optymalny sposób Razz ):

1. Potęgowanie:

Kod:

double pot(double x,int n)
{
   double wyn=1;

   if(n==0 && x==0) { error=1; return 0; }
   if(n<0) { x=(1/x); n=-n;}
   if(n==0) return 1;
   if(x==1) return 1;
   if(n==1) return x;
   if(x==-1 && n%2==0) return 1;
   if(x==-1 && n%2==1) return -1;

   while(n>=1) { wyn *= x; n--; }

   return wyn;
}


2.Pierwiastek (wymaga poprzedniej funkcji w tym samym programie):
Kod:

double prw(double x,int n)
{
   double wyn=0;
   int u=0,m=0,i,j;

   if(n==0) { error=1; return 0; }
   if(n<0 && x==0) { error=2; return 0; }
   if(n<0) {x=(1/x); n=-n;}
   if(x<0 && n%2==0) { error=2; return 0; }
   if(n==1) return x;
   if(x==1) return 1;
   if(x==-1) return -1;
   if(x==0) return 0;
   if(x<0) {u=1; x=-x;}

   if(x>1) while(x>=pot(10,m)) m++;

   for(i=m;i>-10;i--)
   {
      for(j=0;j<10;j++) if(x<=pot((j*pot(10,i)+wyn),n)) break;
      j--; wyn += j*pot(10,i);
   }

   if(u==1) wyn=-wyn;
   return wyn;
}


Aha i wcześniej trzeba zadeklarować zmienną error (globalną) poprzez którą są przekazywane błędy (np. próba liczenia pierwiastka kwadratowego z liczby ujemnej albo potęga zerowa z zera). x to argument,a n wykładnik/stopień.
Powrót do góry
Zobacz profil autora
staniol
ELEKTRONIK - on już ciągnie druty



Dołączył: 12 Paź 2006
Posty: 387
Przeczytał: 0 tematów

Skąd: Piekary Śl.

PostWysłany: Wto 22:20, 27 Mar 2007    Temat postu:

powtorze pytanko z poprzedniego tygodnia i jeszcze raz napisze ze bylbym wdzieczny (i pewnie nie tylko ja Very Happy ) gdyby ktos z grup ktore mialy juz punktowane PPK z funkcji napisal jakie programiki byly do zrobienia Smile pozdro Smile pewnie bylo cos z tego co juz jest na forum,ale jak bylo cos pozatym to dajcie znac Winko
Powrót do góry
Zobacz profil autora
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice



Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów

Skąd: Bytom

PostWysłany: Sob 13:10, 28 Kwi 2007    Temat postu:

Kilka nowych pomysłów z mojej szuflady Razz

1) Program obliczający funkcje trygonometryczne kąta (podanego w stopniach) wykorzystując rozwinięcie funkcji sinus i cosinus w szeregi (najnowsze odkrycie z wykładu z matematyki Wink ):

Kod:

#include <stdio.h>

const double pi=3.141592654;

double redukcja(double x)
{
   if(x<0) return x+360*((int)(-x/360)+1);
   else return x-360*((int)x/360);
}

int silnia(int x)
{
   int wyn=1;
   if(x==0) return 1;
   if(x==1) return 1;
   while(x>1) wyn*=x--;
   return wyn;
}

double pot(double x,int n)
{
   double wyn=1;
   if(n==1) return x;
   while((n--)>0) wyn *= x;
   return wyn;
}

double sin(double x);
double cos(double x);
double tg(double x);
double ctg(double x);

double sin(double x)
{
   int i;
   double wyn=0;

   if(x>=360 || x<0) redukcja(x);
   if(x==0 || x==180) return 0;
   if(x==90) return 1;
   if(x==270) return -1;
   if(x==30 || x==150) return 0.5;
   if(x==210 || x==330) return -0.5;

   if(x>90)
   {
      if(x>180)
      {
         if(x>270) return cos(x-90);
         else return -sin(x-180);
      }
      else return -cos(x-270);
   }

   x=pi*(x/180);

   for(i=1;i<12;i+=2)
   {
      wyn += (pot(x,i)/silnia(i))*(((i+1)%4==0)?(-1):1);
   }
   return wyn;
}

double cos(double x)
{
   int i;
   double wyn=0;

   if(x>=360 || x<0) x=redukcja(x);
   if(x==90 || x==270) return 0;
   if(x==0) return 1;
   if(x==180) return -1;
   if(x==60 || x==300) return 0.5;
   if(x==120 || x==240) return -0.5;

   if(x>90)
   {
      if(x>180)
      {
         if(x>270) return -sin(x-90);
         else return -cos(x-180);
      }
      else return sin(x-270);
   }

   x=pi*(x/180);

   for(i=0;i<11;i+=2)
   {
      wyn += (pot(x,i)/silnia(i))*((i%4==0)?1:(-1));
   }
   return wyn;
}

double tg(double x)
{
   if(x>=360 || x<0) x=redukcja(x);
   if(x==0 || x==180) return 0;
   if(x==45 || x==225) return 1;
   if(x==135 || x==315) return -1;
   if(x==90 || x==270) return 9999999999999;

   return sin(x)/cos(x);
}

double ctg(double x)
{
   if(x>=360 || x<0) x=redukcja(x);
   if(x==90 || x==270) return 0;
   if(x==45 || x==225) return 1;
   if(x==135 || x==315) return -1;
   if(x==0 || x==180) return 9999999999999;

   return cos(x)/sin(x);
}

int main()
{
   double x;
   scanf("%lf",&x);
   printf("\n\nsinus:     %lf",sin(x));
   printf("\ncosinus:   %lf",cos(x));
   printf("\ntangens:   %lf",tg(x));
   printf("\ncotangens: %lf",ctg(x));
   getchar();
   return 0;
}


2) Program do wykonywania podstawowych operacji na liczbach zespolonych (wykorzystując struktury).

Kod:

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

struct zespolona
{
   double re;
   double im;
};

struct zespolona dodaj(struct zespolona z1,struct zespolona z2)
{
   struct zespolona z;
   z.re = z1.re + z2.re;
   z.im = z1.im + z2.im;
   return z;
}


struct zespolona odejmij(struct zespolona z1,struct zespolona z2)
{
   struct zespolona z;
   z.re = z1.re - z2.re;
   z.im = z2.im - z2.im;
   return z;
}

struct zespolona pomnoz(struct zespolona z1,struct zespolona z2)
{
   struct zespolona z;
   z.re = z1.re*z2.re - z1.im*z2.im;
   z.im = z1.re*z2.im + z1.im*z2.re;
   return z;
}

struct zespolona podziel(struct zespolona z1,struct zespolona z2)
{
   struct zespolona z;
   z.re = (z1.re*z2.re + z1.im*z2.im)/(z2.re*z2.re + z2.im*z2.im);
   z.im = (z1.im*z2.re - z1.re*z2.im)/(z2.re*z2.re + z2.im*z2.im);
   return z;
}

double modul(struct zespolona z)
{
   return sqrt(z.re*z.re + z.im*z.im);
}

struct zespolona sprzezenie(struct zespolona z)
{
   struct zespolona z1;
   z1.re = z.re;
   z1.im = -z.im;
   return z1;
}

int main()
{
   struct zespolona z1,z2;
   z1.re=2; z1.im=0; z2.re=3; z2.im=5;
   printf("%lf %lf",podziel(z1,z2));
   printf("\n%lf %lf",sprzezenie(z2));
   getchar();
   return 0;
}
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr II / PPK Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
  ::  
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group   ::   template subEarth by Kisioł. Programosy   ::  
Regulamin