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
|
Wysł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 |
|
|
|
|
staniol
ELEKTRONIK - on już ciągnie druty
Dołączył: 12 Paź 2006
Posty: 387
Przeczytał: 0 tematów
Skąd: Piekary Śl.
|
Wysłany: Wto 22:50, 20 Mar 2007 Temat postu: |
|
|
jakbyscie mogli to napiszcie jakie jeszcze ciekawe funkcje mieliscie do zrobienia :] bylbym wdzieczny pozdro
|
|
Powrót do góry |
|
|
gorush
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 12 Paź 2006
Posty: 644
Przeczytał: 0 tematów
Skąd: Żory/RE
|
Wysł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 |
|
|
kohlet
PRAWIE elektronik - prawie robi...
Dołączył: 26 Paź 2006
Posty: 256
Przeczytał: 0 tematów
Skąd: Łaziskie hałdy
|
Wysłany: Czw 22:56, 22 Mar 2007 Temat postu: |
|
|
Sie gra, sie ma z nudów można coś zawsze wrzucić szczególnie na punktowanych
|
|
Powrót do góry |
|
|
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów
Skąd: Bytom
|
Wysł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 ):
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 |
|
|
staniol
ELEKTRONIK - on już ciągnie druty
Dołączył: 12 Paź 2006
Posty: 387
Przeczytał: 0 tematów
Skąd: Piekary Śl.
|
Wysł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 ) gdyby ktos z grup ktore mialy juz punktowane PPK z funkcji napisal jakie programiki byly do zrobienia pozdro pewnie bylo cos z tego co juz jest na forum,ale jak bylo cos pozatym to dajcie znac o
|
|
Powrót do góry |
|
|
robert_bytom
Sado-Elektro - wiecie gdzie ma lutownice
Dołączył: 21 Paź 2006
Posty: 778
Przeczytał: 0 tematów
Skąd: Bytom
|
Wysłany: Sob 13:10, 28 Kwi 2007 Temat postu: |
|
|
Kilka nowych pomysłów z mojej szuflady
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 ):
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 |
|
|
|
|
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
|
|