Autor |
Wiadomość |
cadaver |
|
|
koji |
Wysłany: Pon 12:53, 08 Sty 2007 Temat postu: |
|
moglby ktos wytlumaczyc zadanka 3 4 5 z listy nr 3 ? o co tak naprawde w nich chodzi ? |
|
|
Lukasz |
Wysłany: Czw 13:44, 04 Sty 2007 Temat postu: |
|
Lista 4 cwiczenie 3
Kod: |
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n;
printf("Podaj wielkosc tablicy: \n");
scanf("%d",&n);
float t[n];
for(i=0;i<n;i++) {t[i]=rand(); printf("%f\n",t[i]);}
float max,min;
i=1;
if(n%2==1) max=min=t[0];
else
{
if(t[0]<t[1]) { min=t[0]; max=t[1]; }
else { min=t[1]; max=t[0]; }
i=2;
}
for(;i<n;i+=2)
{
if(t[i]<t[i+1])
{
if(min>t[i]) min=t[i];
if(max<t[i+1]) max=t[i+1];
}
else
{
if(max<t[i]) max=t[i];
if(min>t[i+1]) min=t[i+1];
}
}
printf("Maximum: %f\nMinimum: %f\n",max,min);
return 0;
}
|
|
|
|
Lukasz |
Wysłany: Czw 12:50, 04 Sty 2007 Temat postu: |
|
Lista 4 cwiczenie 2, przy kompilacji trzeba dodać biblioteki matematyczne, bo sie pluje kompilator
Kod: |
#include <stdio.h>
#include <math.h>
float mycos(float x)
{
float y;
if(fabs(x)<0.1) return y=1-(x*x)/2;
else
{
y=mycos(x/2);
return 2*y*y-1;
}
}
int main()
{
float i=0;
do
{
printf("Biblioteczna: %f\n",cos(i));
printf("Wyliczona: %f\n",mycos(i));
i+=0.01;
}
while(i<0.1);
return 0;
}
|
|
|
|
matt_666 |
Wysłany: Czw 3:53, 04 Sty 2007 Temat postu: |
|
nie tylko ty nie umiesz to po pierwsze,dlatego w tym temacie ja postów nie piszę...
a forum jest martwe bo nic nikt nie pisze,ja się staram jak mogę,ale sam ze sobą nie będę gadać... |
|
|
yumi |
Wysłany: Śro 20:00, 03 Sty 2007 Temat postu: |
|
Powiedzmy sobie szczerze... to forum jest martwe:-( a w szczególności widać, że wszyscy potrafią pisać w C, tylko nie ja;-) no i co ja biedna mam teraz czynić?? |
|
|
cadaver |
Wysłany: Sob 18:55, 23 Gru 2006 Temat postu: |
|
A teraz coś z zupełnie innej beczki...
zad. 4.7
Kod: |
#include <stdio.h>
#include <stdlib.h>
#define N 8
unsigned char X[N][N];
void skocz(unsigned short int n , unsigned char x, unsigned char y) {
X[x][y] = n;
if ( n == N*N) {
unsigned char i,n;
for( i = 0; i < N; i++) {
for( n= 0; n < N; n++) {
printf("%2.0f ",(float)X[i][n]);
}
printf("\n");
}
exit(0);
}
else {
if ((x + 2 < N) && (y + 1 < N) && ( X[x + 2][y + 1] == 0))
skocz( n + 1 , x + 2, y + 1);
if ((x + 2 < N) && (y - 1 >= 0) && ( X[x + 2][y - 1] == 0))
skocz( n + 1 , x + 2, y - 1);
if ((x + 1 < N) && (y + 2 < N) && ( X[x + 1][y + 2] == 0))
skocz( n + 1 , x + 1, y + 2);
if ((x + 1 < N) && (y - 2 >= 0) && ( X[x + 1][y - 2] == 0))
skocz( n + 1 , x + 1, y - 2);
if ((x - 2 >= 0) && (y + 1 < N) && ( X[x - 2][y + 1] == 0))
skocz( n + 1 , x - 2, y + 1);
if ((x - 2 >= 0) && (y - 1 >= 0) && ( X[x - 2][y - 1] == 0))
skocz( n + 1 , x - 2, y - 1);
if ((x - 1 >= 0) && (y + 2 < N) && ( X[x - 1][y + 2] == 0))
skocz( n + 1 , x - 1, y + 2);
if ((x - 1 >= 0) && (y - 2 >= 0 ) && ( X[x - 1][y - 2] == 0))
skocz( n + 1 , x - 1, y - 2);
X[x][y] = 0;
}
}
int main() {
skocz(1, 0, 0);
return 0;
}
|
OK... myslalem, ze progz powyzej bedzie dzialal szybciej, ale jako ze na wynik sie nie doczekalem(na 6x6 jeszcze jakos dziala, 8x8 juz trwa wieki) skrobnalem zoptymalizowany algorytm.
Kod: |
#include <stdio.h>
#include <stdlib.h>
#define N 8
int hops=0;
int X[N][N];
int naj (int *K)
{
int n,m,i;
n=K[0];
m=0;
for( i = 1; i < 8; i++) {
if (K[i] == 9)
K[i] = 0;
if ((n <= K[i])) {
n=K[i];
m=i;
}
}
if (K[m] == 0)
return 88;
K[m]=0;
return m;
}
int sprawdz (int x, int y) {
int i=1;
if (!((x + 2 < N) && (y + 1 < N) && ( X[x + 2][y + 1] == 0))) {
i++;
}
if (!((x + 2 < N) && (y - 1 >= 0) && ( X[x + 2][y - 1] == 0))) {
i++;
}
if (!((x + 1 < N) && (y + 2 < N) && ( X[x + 1][y + 2] == 0))) {
i++;
}
if (!((x + 1 < N) && (y - 2 >= 0) && ( X[x + 1][y - 2] == 0))) {
i++;
}
if (!((x - 2 >= 0) && (y + 1 < N) && ( X[x - 2][y + 1] == 0))) {
i++;
}
if (!((x - 2 >= 0) && (y - 1 >= 0) && ( X[x - 2][y - 1] == 0))){
i++;
}
if (!((x - 1 >= 0) && (y + 2 < N) && ( X[x - 1][y + 2] == 0))) {
i++;
}
if (!((x - 1 >= 0) && (y - 2 >= 0 ) && ( X[x - 1][y - 2] == 0))) {
i++;
}
return i;
}
void skocz(int n , int x, int y) {
int *K,i,j,q;
K = calloc(8,4);
hops++;
X[x][y] = n;
if ( n == N*N-1) {
for( i = 0; i < N; i++) {
for( j= 0; j < N; j++) {
if(!X[i][j])
X[i][j]=N*N;
printf("%3.0f ",(float)X[i][j]);
}
printf("\n");
}
printf("Liczba \"zapetlen\": %d\n",hops);
exit(0);
}
else {
if ((x + 2 < N) && (y + 1 < N) && ( X[x + 2][y + 1] == 0)) {
K[0] = sprawdz( x + 2, y + 1);
}
if ((x + 2 < N) && (y - 1 >= 0) && ( X[x + 2][y - 1] == 0))
K[1] = sprawdz ( x + 2, y - 1);
if ((x + 1 < N) && (y + 2 < N) && ( X[x + 1][y + 2] == 0))
K[2] = sprawdz ( x + 1, y + 2);
if ((x + 1 < N) && (y - 2 >= 0) && ( X[x + 1][y - 2] == 0))
K[3] = sprawdz ( x + 1, y - 2);
if ((x - 2 >= 0) && (y + 1 < N) && ( X[x - 2][y + 1] == 0))
K[4] = sprawdz ( x - 2, y + 1);
if ((x - 2 >= 0) && (y - 1 >= 0) && ( X[x - 2][y - 1] == 0))
K[5] = sprawdz ( x - 2, y - 1);
if ((x - 1 >= 0) && (y + 2 < N) && ( X[x - 1][y + 2] == 0))
K[6] = sprawdz ( x - 1, y + 2);
if ((x - 1 >= 0) && (y - 2 >= 0) && ( X[x - 1][y - 2] == 0))
K[7] = sprawdz ( x - 1, y - 2);
for( i = 0; i < 8; i++) {
switch(naj(K)) {
case 0:
skocz( n + 1 , x + 2, y + 1);
case 1:
skocz( n + 1 , x + 2, y - 1);
case 2:
skocz( n + 1 , x + 1, y + 2);
case 3:
skocz( n + 1 , x + 1, y - 2);
case 4:
skocz( n + 1 , x - 2, y + 1);
case 5:
skocz( n + 1 , x - 2, y - 1);
case 6:
skocz( n + 1 , x - 1, y + 2);
case 7:
skocz( n + 1 , x - 1, y - 2);
case 88: X[x][y] = 0; return;
}
}
}
}
int main() {
int x,y;
printf("Podaj pozycje startowa(np. 0 0): ");
scanf("%d %d",&x,&y);
skocz(1, x, y);
printf("Nie ma rozw.\n");
return 0;
}
|
|
|
|
Gość |
Wysłany: Czw 13:54, 21 Gru 2006 Temat postu: |
|
Kod: |
#include <stdio.h>
#include <math.h>
typedef struct {
double r;
double i;
} dcomplex;
dcomplex add(dcomplex a, dcomplex b)
{
dcomplex c;
c.r=a.r+b.r;
c.i=a.i+b.i;
return c;
}
dcomplex sub(dcomplex a, dcomplex b)
{dcomplex c;
c.r=a.r-b.r;
c.i=a.i-b.i;
return c;
}
dcomplex multi(dcomplex a, dcomplex b)
{dcomplex c;
c.r=a.r*b.r-a.i*b.i;
c.i=a.i*b.r+a.r*b.i;
return c;
}
dcomplex div(dcomplex a, dcomplex b)
{dcomplex c;
c.r=(a.r*a.r)/(a.r*a.r+b.r*b.r) + (b.r*b.r)/(a.r*a.r+b.r*b.r);
c.i=(b.i*a.r)/(a.r*a.r+b.r*b.r) - (a.r*b.i)/(a.r*a.r+b.r*b.r);
return c;
}
dcomplex mod(dcomplex a)
{dcomplex c;
c.r=sqrt(a.r*a.r+a.i*a.i);
c.i=0;
return c;
}
void wczytaj (dcomplex *a)
{
printf ("Podaj Re liczby w ");
scanf ("%lf", &(a->r));
printf ("Podaj Im liczby w ");
scanf ("%lf", &(a->i));
}
int main ()
{
dcomplex i, j, k, l, m, n;
wczytaj (&i);
wczytaj (&j);
wczytaj (&k);
wczytaj (&l);
wczytaj (&m);
wczytaj (&n);
dcomplex w, ww, wz,p;
w=sub(multi(i,m), multi (j,l));
ww=sub(multi(k,m), multi(n,l));
wz=sub(multi(i,k), multi(j,n));
if (w.r==0&&w.i==0)
{
if(ww.r==0&&ww.i==0&&wz.r==0&&wz.i==0)
printf ("Układ równań jest nieoznaczony");
else
printf ("Układ równań równań jest sprzeczny");
}
else
printf ("Rozwiązanie tego układu to:\n");
p=div(w,ww);
printf ("w=%lf+%lfi\n", p.r, p.i);
p=div(w,wz);
printf ("z=%lf+%lfj\n", p.r, p.i);
return 0;
}
|
|
|
|
Gość |
Wysłany: Czw 13:53, 21 Gru 2006 Temat postu: |
|
LISTA 3 ZADANIE 8 [zespolone]:
Kod: |
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct {
double r;
double i;
} dcomplex;
dcomplex add (dcomplex a, dcomplex b) {
dcomplex c;
c.r = a.r + b.r;
c.i = a.i + b.i;
return c;
}
dcomplex mult (dcomplex a, dcomplex b) {
dcomplex c;
c.r = a.r * b.r - a.i * b.i;
c.i = a.i * b.r + a.r * b.i;
return c;
}
dcomplex przeciwny (dcomplex a) {
dcomplex c;
c.r = -a.r;
c.i = -a.i;
return c;
}
dcomplex odwrotny (dcomplex a) {
dcomplex c;
c.r = a.r/(a.r*a.r + a.i*a.i);
c.i = -a.i/(a.r*a.r + a.i*a.i);
return c;
}
dcomplex sprzezenie (dcomplex a) {
dcomplex c;
c.r = a.r;
c.i = -a.i;
return c;
}
dcomplex roznica (dcomplex a, dcomplex b) {
return add (a,przeciwny (b));
}
dcomplex iloraz (dcomplex a, dcomplex b) {
return mult (a, odwrotny (b));
}
double modul (dcomplex a) {
return fabs(a.r) * sqrt(1+(a.i/a.r)*(a.i/a.r));
}
int ur2 (dcomplex a,dcomplex b,dcomplex c,dcomplex d,dcomplex e,dcomplex f, dcomplex *x, dcomplex *y) {
dcomplex det;
det = roznica(mult(a,e), mult(d,b));
if (det.r == 0 && det.i == 0) return 0;
else
*x = iloraz(roznica(mult(c,e), mult(f,b)),det);
*y = iloraz(roznica(mult(a,f), mult(d,c)),det);
return 1;
}
int main () {
dcomplex a,b,c,d,e,f,x,y;
/*double m;*/
printf ("podaj czesc rzeczywista liczby zespolonej a : ");
scanf ("%lf", &a.r);
printf ("podaj czesc urojona liczby zespolonej a : ");
scanf ("%lf", &a.i);
printf ("podaj czesc rzeczywista liczby zespolonej b : ");
scanf ("%lf", &b.r);
printf ("podaj czesc urojona liczby zespolonej b : ");
scanf ("%lf", &b.i);
printf ("podaj czesc rzeczywista liczby zespolonej c : ");
scanf ("%lf", &c.r);
printf ("podaj czesc urojona liczby zespolonej c : ");
scanf ("%lf", &c.i);
printf ("podaj czesc rzeczywista liczby zespolonej d : ");
scanf ("%lf", &d.r);
printf ("podaj czesc urojona liczby zespolonej d : ");
scanf ("%lf", &d.i);
printf ("podaj czesc rzeczywista liczby zespolonej e : ");
scanf ("%lf", &e.r);
printf ("podaj czesc urojona liczby zespolonej e : ");
scanf ("%lf", &e.i);
printf ("podaj czesc rzeczywista liczby zespolonej f : ");
scanf ("%lf", &f.r);
printf ("podaj czesc urojona liczby zespolonej f : ");
scanf ("%lf", &f.i);
if (ur2(a,b,c,d,e,f,&x,&y))
printf ("rozwiazanie : x = %lf %lf, y = %lf %lf \n", x.r,x.i,y.r,y.i);
else printf ("uklad nieoznaczony lub sprzeczny");
/*printf ("a : %lf, %lf \n", a.r, a.i);
printf ("b : %lf, %lf \n", b.r, b.i);
c=przeciwny(a);
printf ("przeciwny a : %lf %lf \n", c.r,c.i);
c=przeciwny(b);
printf ("przeciwny b : %lf %lf \n", c.r,c.i);
c=odwrotny(a);
printf ("odwrotny a : %lf %lf \n", c.r,c.i);
c=odwrotny(b);
printf ("odwrotny b : %lf %lf \n", c.r,c.i);
c=add(a,b);
printf ("suma : %lf %lf \n", c.r,c.i);
c=add(a,przeciwny(b));
printf ("roznica : %lf %lf \n", c.r,c.i);
c=mult(a,b);
printf ("iloczyn : %lf %lf \n", c.r,c.i);
c=mult(a,odwrotny(b));
printf ("iloraz : %lf %lf \n", c.r,c.i);
c=sprzezenie(a);
printf ("sprzezenie a : %lf %lf \n", c.r,c.i);
c=sprzezenie(b);
printf ("sprzezenie b : %lf %lf \n", c.r,c.i);
m=modul(a);
printf ("modul a : %lf \n", m);
m=modul(b);
printf ("modul b : %lf \n", m);*/
printf ("\n\n");
return 0;
}
|
|
|
|
Lukasz |
Wysłany: Czw 13:52, 21 Gru 2006 Temat postu: |
|
BYC MZOE DOBRE
Kod: |
#include<stdio.h>
#include<math.h>
typedef struct
{
double r;
double i;
} dcomplex;
dcomplex add(dcomplex a,dcomplex b)
{dcomplex c;
c.r=a.r+b.r;
c.i=a.i+b.i;
return c;
}
dcomplex sub(dcomplex a,dcomplex b)
{dcomplex c;
c.r=a.r-b.r;
c.i=a.i-b.i;
return c;
}
dcomplex multi(dcomplex a,dcomplex b)
{dcomplex c;
c.r=a.r*b.r-a.i*b.i;
c.i=a.i*b.r-a.r*b.i;
return c;
}
double mod(dcomplex a)
{return a.r*a.r+a.i*a.i;
}
dcomplex inv(dcomplex a)
{dcomplex c;
c.r=-a.i/mod(a);
c.i=a.r/mod(a);
return c;
}
dcomplex div(dcomplex a,dcomplex b)
{
return multi(a, inv(b));
}
void wczytaj(dcomplex *a)
{
printf("Podaj Re liczby");
scanf("%lf",&(a->r));
printf("Podaj Im liczby");
scanf("%lf",&(a->i));
}
int main()
{
dcomplex i,j,k,l,m,n;
wczytaj (&i);
wczytaj (&j);
wczytaj (&k);
wczytaj (&l);
wczytaj (&m);
wczytaj (&n);
dcomplex w,ww,wz,p;
w=sub(multi(i,m),multi(j,l));
ww=sub(multi(k,m),multi(n,l));
wz=sub(multi(i,k),multi(j,n));
if(w.r==0&&w.i==0)
{if(ww.r==0&&ww.i==0&&wz.r==0&&wz.i==0)
printf("Uklad rownan nieoznaczony");
else
printf("Uklad rownan sprzeczny");
}
else
{
printf("Rozwiazania to:\n");
p=div(w,ww);
printf("w=%lf+%lfi\n",p.r,p.i);
p=div(w,wz);
printf("w=%lf+%lfi\n",p.r,p.i);
}
return 0;
}
|
|
|
|
cadaver |
Wysłany: Czw 20:43, 14 Gru 2006 Temat postu: |
|
Lista 3 zad. 6:
Kod: |
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void zapal( char *A , int n, int i ) {
A[n] = A[n] | ( 1 << i);
}
void zgas( char A[] , int n, int i ) {
A[n] = A[n] & (~( 1 << i));
}
int main() {
char *A;
unsigned int n,i,g,m,S;
printf("Ile licz przeszukac(ogranicza cie tylko pamiec)?!?!?!?!? ");
scanf("%d",&S);
g = (int)sqrt(S) + 1;
A = (char*)malloc((S/8)+1);
for (n = 0; n < S/8+1 ; n++) {
for (i = 1; i <= 8; i++)
zapal( A , n, i);
}
for (n = 2; n < g ; n++) {
if ((A[n/8] & (1 << n%8))) {
for(m = 2; n * m <= S; m++) {
zgas( A , n*m / 8, n*m % 8);
}
}
}
for (n = 2; n <= S ; n++)
if ((A[n/8] & (1 << n%8)))
printf("%d \n",n);
system("PAUSE");
free(A);
return 0;
}
|
Udalo mi sie policzyc pierwsze 3,5mld licz pierwszych - plik wynikowy zajmuje 2GB |
|
|
Gość |
Wysłany: Czw 13:57, 14 Gru 2006 Temat postu: |
|
LISTA 3 - cwiczenia 3,4,5 w jednym [czytelniej niz wyzej ]
Kod: |
#include <stdio.h>
#include <string.h>
#include <math.h>
char ZNAKI [16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void strev (char s[]) {
int j = 0;
char x;
for ( j=0; j<strlen(s)/2; j++) {
x = s[j];
s[j] = s[strlen(s)-1 - j];
s[strlen(s)-1 - j] = x;
}
}
void uint2str (unsigned int n, int r, char s[]) {
int i = 0;
if (n==0) s[i++] = '0';
else
while (n) {
s[i++] = ZNAKI [n % r];
n = n / r;
}
s[i] = '\0';
strev(s);
}
int char2uint (int r, char s[]) {
int k,i = 0;
int wynik = 0;
while (s[i] != '\0') {
k=0;
while (s[i] != ZNAKI[k]) k++;
if (k >= r) return -1;
wynik = wynik*r + k;
i++;
}
return wynik;
}
void d2r (double x, char s[], int r) {
int i = 0;
while (i < 40) {
x=x*r;
s[i]=ZNAKI[(int)floor(x)];
x-=floor(x);
i++;
}
s[i]='\0';
}
int main () {
int n, r;
char s[100],t[100];
double x;
printf ("podaj liczbe n : ");
scanf ("%d", &n);
printf ("podaj podstawe r : ");
scanf ("%d", &r);
printf ("podaj liczbe x : ");
scanf ("%lf", &x);
uint2str (n,r,s);
printf ("%s\n", s);
printf("%d\n", char2uint(r,s));
uint2str((int)floor(x),r,t);
d2r (x-floor(x),s,r);
printf("%s,%s\n", t, s);
printf ("\n\n");
return 0;
}
|
|
|
|
Gość |
Wysłany: Czw 13:56, 14 Gru 2006 Temat postu: |
|
|
|
|
Gość |
Wysłany: Czw 13:56, 14 Gru 2006 Temat postu: |
|
<code>
fddd
</code> |
|
|
Gość |
Wysłany: Czw 13:55, 14 Gru 2006 Temat postu: |
|
LISTA 3 - cwiczenia 3,4,5 w jednym:
#include <stdio.h>
#include <string.h>
#include <math.h>
char ZNAKI [16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void strev (char s[]) {
int j = 0;
char x;
for ( j=0; j<strlen(s)/2; j++) {
x = s[j];
s[j] = s[strlen(s)-1 - j];
s[strlen(s)-1 - j] = x;
}
}
void uint2str (unsigned int n, int r, char s[]) {
int i = 0;
if (n==0) s[i++] = '0';
else
while (n) {
s[i++] = ZNAKI [n % r];
n = n / r;
}
s[i] = '\0';
strev(s);
}
int char2uint (int r, char s[]) {
int k,i = 0;
int wynik = 0;
while (s[i] != '\0') {
k=0;
while (s[i] != ZNAKI[k]) k++;
if (k >= r) return -1;
wynik = wynik*r + k;
i++;
}
return wynik;
}
void d2r (double x, char s[], int r) {
int i = 0;
while (i < 40) {
x=x*r;
s[i]=ZNAKI[(int)floor(x)];
x-=floor(x);
i++;
}
s[i]='\0';
}
int main () {
int n, r;
char s[100],t[100];
double x;
printf ("podaj liczbe n : ");
scanf ("%d", &n);
printf ("podaj podstawe r : ");
scanf ("%d", &r);
printf ("podaj liczbe x : ");
scanf ("%lf", &x);
uint2str (n,r,s);
printf ("%s\n", s);
printf("%d\n", char2uint(r,s));
uint2str((int)floor(x),r,t);
d2r (x-floor(x),s,r);
printf("%s,%s\n", t, s);
printf ("\n\n");
return 0;
} |
|
|