Materiały pomocnicze ProgramyINFORMATYKA

Współrzędne biegunowe. Napisz program,, który zamienia współrzędne punktu podane we współrzędnych kartezjańskich na współrzędne biegunowe. Zmodyfikuj swój program tak, aby punkt we współrzędnych kartezjańskich jak i biegunowych był zapisany w strukturach. Napisz funkcję, której argumentami są wskaźniki na struktury, zamieniającą jedną reprezentację punktu w drugą. Na przykład: void change (polar* str1, Cartesian* str2);

Generator liczb losowych Gaussa. Napisz funkcję, generator liczb losowych Gaussa i wykorzystaj ją do napisania programu w którym użytkownik zgaduje wylosowaną przez komputer liczbę. Napisz demo, w którym komputer sam zgaduje liczbę przy pomocy metody bisekcji. Generator liczb losowych może być opisany wzorem Box-Mullera:

Z = sin(2 π v) (-2 ln u)1/2 w którym u i v są liczbami rzeczywistymi z zakresu 0 i 1 generowanymi przez wbudowaną funkcję rand().

Konwersja kolorów. Napisz strukturę która przechowuje kolor zapisany w jednym z formatów: RGB oraz CMYK. Napisz program, który zamienia kolor reprezentowany przez RGB na kolor reprezentowany przez CMYK. Jeśli wartości R, G, B są równe zero to wartość C,M,Y są równe zero a wartość K = 1. W przeciwnym wypadku wykorzystuje się wzór.

Funkcja może operować na wskaźnikach do struktur, Na przykład: void (RGB* k1, CMYK* k2);

Rozwiązanie:

- Zagadnienia: zastosowanie struktur do przechowywania danych, funkcje które przyjmują wskaźnik na strukturę jako parametr wejściowy i wyjściowy,

- Autor: Marek Miodunka

- /*

* Konwersja kolorow

* RGB <-> CMYK

* Autor: Marek Miodunka gr.25 rok IF

* 14.12.2010

*/

#include <iostream>

using namespace std;

struct kolor {

double cze, zie, nie, white, cyan, magenta, yellow, black;

};

void konwerter(kolor* rgb, kolor* cmyk);

double maximum(kolor* rgb);

main()

{

kolor rgb;

kolor cmyk;

cout<<"Wpisz kolejno wartosci red, green, blue (0-255)"<<endl;

cin>>rgb.cze>>rgb.zie>>rgb.nie;

konwerter(&rgb, &cmyk);

cout<<"Po konwersji C,M,Y,K:" << endl<<cmyk.cyan<<endl<<cmyk.magenta<<endl<<cmyk.yellow<<endl<<cmyk.black<<endl;

system("pause");

return 0;

}

double maximum(kolor* rgb){

double max=0;

if(max<(rgb->cze))

max=rgb->cze;

if(max<(rgb->zie))

max=rgb->zie;

if(max<(rgb->nie))

max=rgb->nie;

return max;

}

void konwerter(kolor* rgb, kolor* cmyk)

{

double white = maximum(rgb);

if(rgb->cze==0 && rgb->zie==0 && rgb->nie==0){

cmyk->cyan = 0;

cmyk->magenta = 0;

cmyk->yellow = 0;

cmyk->black = 1;}

else{

cmyk->cyan = (white - ((rgb->cze)/255)) / white;

cmyk->magenta = (white - ((rgb->zie)/255)) / white;

cmyk->yellow = (white - ((rgb->nie)/255)) / white;

cmyk->black = (1-white);}

}

Współrzędna barycentryczna. W układzie dwóch ciał, barycentrum jest środkiem ciężkości wokół którego krążą dwa ciała niebieskie okrążające się wzajemnie. Mając masy m1 oraz m2 ciał a także najkrótszą odległość pomiędzy dwoma ciałami a, odległość pierwszego (o większej masie ciała) do środka ciężkości jest równa: r1 = a m2 / (m1 + m2). Znając promień pierwszego R1 ciała policz współczynnik r1/R1. Jeśli r1 < R1 – środek ciężkości leży wewnątrz pierwszego ciała. Napisz program, który sprawdza wartość r1/R1 dla wybranych układów ciał niebieskich oraz funkcję liczącą wartość r1. Masy wyrażone są w wielokrotnościach masy Ziemi a odległości w kilometrach.

Rozwiązanie:

- Zagadnienia: zastosowanie funkcji w problemie obliczeniowym, funkcje sterujące programem

- Autor: Łukasz Szmist

#include <cstdlib>

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

using namespace std;

int a;

int b;

int c;

int d;

int odleglosc(int a, int b, int c)

{

{

d=(a*c)/(b+c);

}

return d;

}

int main()

{ int e;

printf("podaj najkrotsza odleglosc pomiedzy dwoma cialami\n");

cin>>a;

printf("podaj mase ciezszego ciala jako wielokrotnosc masy ziemi\n");

cin>>b;

printf("podaj mase lzejszego ciala jako wielokrotnosc masy ziemi\n");

cin>>c;

d=odleglosc(a,b,c);

printf("odleglosc ciezszej planety od srodka ciezkosci to %d\n",d);

printf("podaj promien wiekszego ciala\n");

cin>>e;

if((d/e<1)){

printf("srodek ciezkosci ukladu znajduje sie wewnatrz pierwszego ciala\n");}

else {

printf("srodek ciezkosci ukladu znajduje sie poza pierwszym cialem\n");}

system("PAUSE");

return EXIT_SUCCESS;

}

Metoda Newtona. Napisz własny program i funkcję, który liczby pierwiastek kwadratowy liczby przy pomocy metody Newtona. Metoda obliczania pierwiastka kwadratowego z x wywodzi się z czasów Herona z Aleksandrii i jest szczególnym przypadkiem ogólniejszej metody Newtona-Raphsona. Zacznij obliczenia podając pierwsze przybliżenie pierwiastka kwadratowego: t. Jeśli t jest równe x/t (w danej precyzji) jest ono wynikiem, jeśli nie t zastępowane jest średnią z t i x/t. Program liczy aż do uzyskania zbieżności.

Konwersja liczb. Napisz program, który zamienia całkowitą dodatnią liczbę dziesiętną na jej reprezentację binarną. Program zapisuje kolejne cyfry liczby binarnej na ekranie. Napisz funkcję, która zapisuje reprezentację binarną liczby w tablicy dynamicznej zadeklarowanej wcześniej np. void (int number, int* binary); wykorzystaj algorytm z pierwszych zajęć.

Rozwiązanie:

- Uwagi: program jest niepełny, brak tablicy dynamicznej, zadanie zostało wykonane przy pomocy funkcji rekurencyjnej

- Zagadnienia: funkcję, zastosowanie pętli do rozwiązania problemu, rekurencja – nie jest wymagana ale warto zwrócić na nią uwagę

- Autor: Maciej Skupień

#include <stdio.h>

#include <stdlib.h>

#include <iostream>

using namespace std;

void tab(int number, int* binary);

void konwersja(int x){

if (!x) return;

konwersja(x/2);

cout << x%2;

}

int main(){

int x;

cout << "Podaj liczbe calkowita dodatnia: ";

cin >> x;

konwersja(x);

cout << endl;

system ("pause");

return 0;

}

Wyznaczenie wartości funkcji ex.. Napisz funkcję wyznaczającą wartości podanej funkcji przy pomocy jej rozwinięcia w szereg Taylora. Wykorzystaj funkcję w programie aby wyliczyć wartości funkcji ex dla tablicy n liczb zawartych pomiędzy -10 a 10.

ex = 1 + x + x2/2! + x3/3! + x4/4! + . . .

Rozwiązanie:

- Uwagi: brak tablicy liczbowej

- Zagadnienia: funkcje oraz ich zastosowanie do obliczenia złożonego problemu, zastosowanie pętli w obliczeniach

- Autor: Tomasz Szaro

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<iostream>

using namespace std;

long double potega(double a,double b)

{

long double d=a;

if (b>0) {

for (int i=1;i<b;i++)

{

d=d*a;

}

}

if (b==0)

{ d=1;}

if (b<0) {

b=-b;

for (int i=1;i<b;i++)

{

d=d*a;

}

d=1/d;

}

return d;

}

long double silnia(int a)

{

int d=1;

for(int i=1;i<=a;i++)

{

d=d*i;

}

return d;

}

int main() {

int x;

float wynik=0;

cout<<"Podaj do ktorej potegi podnosimy e, z przedzialu (-5,10) x=";

cin>>x;

{

for(int n=0;n<13;n++)

{

wynik=wynik+(potega(x,n)/silnia(n));

}

}

cout<<"Przyblizona liczba wynosi:"<<wynik<<endl;

system("pause");

}

Funkcje trygonometryczne. Napisz funkcję liczącą wartości funkcji sinx oraz cosx wykorzystującą ich rozwinięcia w szereg Taylora.

sin x = x - x3/3! + x5/5! - x7/7! + . . .

cos x = 1 - x2/2! + x4/4! - x6/6! + . . .

Wykorzystaj funkcję w programie aby wyliczyć wartości funkcji ex dla tablicy n liczb zawartych pomiędzy -2*pi a 2*pi.

Spacer Pijaka 2D. Napisz funkcję symulującą dwuwymiarowy spacer pijaka, symulujący chaotycznych ruch na planszy podzielonej na kwadratową siatkę. W każdym kroku spacerujący może poruszać się na północ, południe, wschód lub zachód z prawdopodobieństwem ¼ niezależnie od poprzednich kroków. Napisz program, który przetestuje funkcję oraz obliczy średnią odległość jaka została przebyta po wykonaniu N kroków.

Rozwiązanie:

- Zagadnienia: zastosowanie dwuwymiarowej tablicy, wizualizacja problemu, zastosowanie pętli oraz instrukcji sterujących w programie, obsługa wejścia/wyjścia, zastosowanie generatora liczb losowych w problemie

- Autor: Tomasz Marczak

#include <cstdlib>

#include <iostream>

#include <time.h>

#include <math.h>

using namespace std;

int n,k,x,y,xpocz,ypocz,xkonc,ykonc,ruch,p;

float dl,sr=0;

int ** plansza;

int pokaz (){

for (int k=1;k<n+1; k++){

cout <<"\n";

for (int j=1;j<n+1; j++){

cout.width (1);

cout << plansza[k][j] <<" " ;

}

}

return 0;

}

int main(int argc, char *argv[])

{

srand ( time(NULL) );

cout << "Podaj ilosc prob \n";

cin >> p;

cout << "Podaj ilosc krokow \n";

cin >> n;

k=n;

n=(n*2)+1;

plansza = new int*[n];

for (int i=0; i<n+1; i++)

plansza[i] = new int[n];

for (int i=0; i<n+1; i++)

for (int j=0; j<n+1; j++)

plansza [i][j]=0;

for (int o=0; o<p ; o++){

x=(n/2)+1;

y=(n/2)+1;

xpocz=x;

ypocz=y;

plansza [x][y]=1;

cout << "\n\n";

pokaz();

//system ("PAUSE");

for (int i=0; i<k; i++){

ruch = rand() % 4+1;

//cout <<"\n" << ruch << "\n"; nr kierunku

switch (ruch)

{

case 1: /*plansza [x][y]=0;*/ x=x+1; plansza [x][y]=1; break; //plansza [x][y]=0 usuwa slad po pijaku

case 2: /*plansza [x][y]=0;*/ y=y+1; plansza [x][y]=1; break; // -||-

case 3: /*plansza [x][y]=0;*/ x=x-1; plansza [x][y]=1; break; // -||-

case 4: /*plansza [x][y]=0;*/ y=y-1; plansza [x][y]=1; break; // -||-

}

cout << "\n";

pokaz();

//system ("PAUSE");

}

xkonc=x;

ykonc=y;

//cout << xkonc <<"\n" <<ykonc; wspolrzedne koncowe

dl=sqrt(((xkonc-xpocz)*(xkonc-xpocz))+((ykonc-ypocz)*(ykonc-ypocz)));

sr=sr+dl;

cout <<"\n"<<dl<<"\n";

plansza [x][y]=0;

}

sr=sr/p;

cout <<"\n\n Srednia odl= " << sr <<"\n";

system("PAUSE");

return EXIT_SUCCESS;

}

Wzory. Napisz programy, które rysują wzory podane poniżej wykorzystując pętle programowe. Zauważ charakterystyczne prawidłowości we wzorach.

* * * * * *

. * * * * *

. . * * * *

. . . * * *

. . . . * *

. . . . . *

* . . . . . *

. * . . . * .

. . * . * . .

. . . * . . .

. . * . * . .

. * . . . * .

* . . . . . *

Rozwiązanie:

- Uwagi: Zrobiona tylko połowa zadania:

- Autor: Daniel Szczyrba

#include <stdio.h>

#include <stdlib.h>

#include <iostream>

using namespace std;

int main()

{

int n=6;

for(int j=6;j>0;j--)

{

for(int i=n;i<6;i++)

{

cout<<".";

}

for(int k=n;k>0;k--)

{

cout<<"*";

}

n=n-1;

cout<<endl;

}

system("PAUSE");

return 0;

}

-Autor: Justyna Matląg

-Uwagi: całość

#include <cstdlib>

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

int i,j;

puts("WZORY - Justyna Matlag\n\n");

puts("Wzor pierwszy\n");

for (i=1; i <= 6; i++)

{

for (j=1; j <= 6; j++)

{

if (j>=i) printf("*"); else printf(".");

}

printf("\n");

}

printf("\n");

system("PAUSE");

puts("Wzor drugi\n");

for (i=1; i <= 7; i++)

{

for (j=1; j <= 7; j++)

{

if (j == i or j == 8-i) printf("*"); else printf(".");

}

printf("\n");

}

system("PAUSE");

return EXIT_SUCCESS;

}

Wzory. Napisz programy, które rysują wzory podane poniżej wykorzystując pętle programowe. Zauważ charakterystyczne prawidłowości we wzorach.

* . . . . . *

* * . . . * *

* * * . * * *

* * * * * * *

* * * . * * *

* * . . . * *

* . . . . . *

. . . . * . . . .

. . . * * * . . .

. . * * * * * . .

. * * * * * * * .

* * * * * * * * *

. * * * * * * * .

. . * * * * * . .

. . . * * * . . .

. . . . * . . . .

Rozwiązanie:

- Uwaga: wizualnie wygląda inaczej, ale wynika to ze sposobu w jaki znaki wypisywane są w konsoli i w Wordzie.

- Zagadnienia: zastosowanie pętli zagnieżdżonych, obsługa wejścia/wyjścia, menu użytkownika i możliwość wielokrotnego wykonywania programu

- Autor: Wojciech Bugajski

Kod programu:

#include <cstdlib>

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

const int N=7;

const int M=9;

int wybor;

char k='T';

while (k=='T'||k=='t'){

cout << "Ktory wzorek zyczysz sobie zobaczyc [1] czy [2]?\n";

cin >> wybor;

cout << "Wybrales wzorek " << wybor<<"\n";

switch (wybor){

case 1:

for (int i=1; i<=4; i++)

{ for(int j=0; j<i; j++) {cout << " * ";}

for(int k=0; k<N-2*i; k++) {cout << " . ";}

for (int l=0; l<i; l++) {cout << " * ";}

cout << "\n";

}

for(int i=3; i>0; i--)

{ for(int j=0; j<i; j++) {cout << " * ";}

for(int k=0; k<N-2*i; k++) {cout << " . ";}

for (int l=0; l<i; l++) {cout << " * ";}

cout << "\n";}

cout << "\n";

break;

// 2 wzorek

case 2:

for (int i=4; i>0; i--)

{ for(int j=0; j<i; j++) {cout << " . ";}

for(int k=0; k<M-2*i; k++) {cout << " * ";}

for (int l=0; l<i; l++) {cout << " . ";}

cout << "\n";}

for(int i=0; i<=4; i++)

{ for(int j=0; j<i; j++) {cout << " . ";}

for(int k=0; k<M-2*i; k++) {cout << " * ";}

for (int l=0; l<i; l++) {cout << " . ";}

cout << "\n";}

cout << "\n";

break;

default:

cout<<"Niestety, taki nie istnieje\n";

break;

}

cout<<"Czy zyczysz sobie obejrzec ktorys z nich jeszcze raz? - wcisnij[T] ";

cin >>k;

}

system("PAUSE");

return EXIT_SUCCESS;

}

Problem Pepysa. W 1693 roku Samuel Pepys napisał list do Issaka Newtona z pytaniem: co jest bardziej prawdopodobne: wyrzucenie co najmniej jednej jedynki za pomocą jednej kostki w sześciu rzutach, czy co najmniej dwóch jedynek rzucając jedną kostka 12 razy. Napisz program symulujący rzut N kostkami M razy, którego wykorzystanie pomoże rozwiązać ten program.

Rozwiązanie:

- Zagadnienia: funkcje, zastosowanie pętli programowych do wyliczenia wyniku, menu użytkownika, rzutowanie zmiennej

- Autor: Tomasz Strzałka

Kod programu:

#include<cstdlib>

#include<time.h>

#include<conio.h>

#include<iostream>

using namespace std;

int rzut()

{

int i=rand()%6+1;

if(i==1)

return 1;

else return 0;

}

main()

{

srand(time(NULL));

int ilosc=0;

int a=0;

int n,m;

cout << "podaj iloma kostkami rzucac i ile razy" << endl;

cin >> n ;

cin>> m;

for (int k=0; k<1000; k++)

{

for(int i=0; i<n; i++)

{

for (int j=0; j<m;j++)

{

a=rzut();

ilosc = ilosc +a;

}

}

}

double srednio;

srednio = (double)ilosc/1000;

//cout << endl << "Podczas " << n << " rzutow " << m << " kostkami " << ilosc << " razy wylosowano jedynke" << endl;

cout << "Podczas 1000 prob skladajacych sie z " << n << " rzutow " << m << " kostkami kazda, srednio wyrzucano "

<< srednio << "jedynek podczas 1 proby " << endl;

double prawd;

prawd = srednio/(m*n);

cout << "prawdopodobienstwo wypadniecia 1 wynosi " << prawd;

getch();

}

- Autor: Adrian Czudej

#include <cstdlib>

#include <iostream>

using namespace std;

void rzut(int k,int r)

{

float p=0;

for(int i=0;i<r;i++) //ilość rzutów kostkami

{

for(int i=0;i<k;i++) //ilość kostek

{

int b=(rand()%6+1);//losowanie rzutu

if(b==1)

p=p+1; //tyle razy wypadło 1

}

}

cout<<p/(r*k)<<endl;

/*prawdopodobieństwo wypadnięcia 1 przy rzucie m razy

n kostkami*/

}

int main(int argc, char *argv[])

{

int n,m;

cout<<"wprowadz ilosc kostek szesciennych"<<endl;

cin>>n;

cout<<"wprowadz ilosc rzutow kostkami"<<endl;

cin>>m;

rzut(n,m);

cout<<"wynik jest prawdopodobienstwem wyrzucenia liczby 1"<<endl;

system("PAUSE");

return EXIT_SUCCESS;

}

Liczba Reynoldsa. Liczba Re opisuje stosunek sił inercyjnych do sił lepkich i jest istotną wielkością w dynamice płynów. Napisz funkcję pobierającą cztery parametry, średnicę d, prędkość v, gęstość ro lepkość mu oraz liczącą wartość Re = d*v*ro/mu . Funkcja klasyfikuje przepływy: <2000 przepływ laminarny, pomiędzy 2000 oraz 4000 przepływ przejściowy, > 4000 przepływ turbulentny.

Rozwiązanie:

- Uwagi: w przykładzie zastosowana jest obsługa plików z języka C++, ponadto wykorzystany jest typ danych string do przechowywania stałych typu łańcuch znaków, występuje sprawdzenie poprawności pliku

- Zagadnienia: zastosowanie funkcji w C/C++, przykład pokazuje w jaki sposób wykorzystać funkcję nawet do takich działań jak na przykład porównanie jakichś wartości

- Autor: Krzysztof Mróz

Kod programu:

#include <cstdlib>

#include <iostream>

#include<fstream>

using namespace std;

float oblicz(float a, float b, float c, float d)

{

return a*b*c/d;

}

string jesli(float e)

{if (e>4000)

return "Przeplyw turbulentny \n";

else if (e<2000)

return "Przeplyw laminarny \n";

else

return "Przeplyw przejsciowy \n";

}

void napisz(float f)

{if (f>4000)

printf("Przeplyw turbulentny \n");

else if (f<2000)

printf("Przeplyw laminarny \n");

else

printf("Przeplyw przejsciowy \n");

}

float d,v,ro,mu,re;

string rey,b;

int main(int argc, char *argv[])

{

printf("podaj srednice: \n");

scanf("%f",&d);

printf("podaj predkosc: \n");

scanf("%f",&v);

printf("podaj gestosc: \n");

scanf("%f",&ro);

printf("podaj lepkosc: \n");

scanf("%f",&mu);

re=oblicz(d,v,ro,mu);

printf("Liczba Reynoldsa wynosi: %3.2f \n",re);

napisz(re);

b=jesli(re);

ofstream rob;

rob.open("rey.txt", ios::out | ios::app);

if( !rob )

printf( " blad otwarcia ");

else

rob<< "Liczba Reynoldsa wynosi: "<<re<<"\n"<<b;

rob.close();

system("PAUSE");

return EXIT_SUCCESS;

}

Dźwięki. Napisz program, który umożliwi wykorzystania głośnika systemowego do zagrania melodii. Wykorzystaj funkcję: beep(częstotliwość, czas) oraz sleep (czas) do wygenerowania pojedynczego dźwięku jednotonowego. Częstotliwości i długości trwania dźwięków wczytaj z pliku tekstowego zawierającego dwie kolumny wartości do dwóch tablic.

The Game of Pig. Jest to gra w której rzuca się kostką, która została opisana w 1945 roku przez Johna Scarne’a. W grze dwaj gracze rywalizują, aby zyskać 100 punktów, ten kto pierwszy je uzyska – wygrywa. W każdej turze gracz ma do wyboru: 1) rzucić kostką: jeśli wypadnie 1 – gracz traci turę i musi oddać wszystkie punkty przeciwnikowi, 2-6 dodaje punkty do swojej puli. 2) oddać turę przeciwnikowi, wówczas zyskuje wszystkie zebrane punkty. Napisz program do grania w podaną grę oraz demo które ją wykorzystuje.

Zagadnienia:

- zastosowanie pętli programowych do sterowania złożonym programem, obsługa wejścia i wyjścia

- Autor: Karol Michalczyk

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#define STOP 'n'

#define START 'y'

int main()

{

int gracz_1ptk=0;

int gracz_2ptk=0;

int won = 0;

int wynik;

char decyzja;

while(gracz_1ptk <=100 && gracz_2ptk <= 100) /* GŁÓWNA PĘTLA- warunek wygranej*/

{

printf("Rzuca gracz 1\n\n");

while((decyzja=getch())!=STOP || (decyzja=getch())==START) /* gracz 1 gra*/

{

if(gracz_1ptk >=100 || gracz_2ptk >= 100) /* warunek przypisania zmienej zwycienstwa*/

{

won=1;

}

if(won==1) /* przerwanie petnli gracza 1 */

break;

wynik=rand()%6+1;

printf("Wynik rzutu %d\n", wynik);

if(wynik!=1) /* warunek uzyskania punktów gracz 1*/

{

gracz_1ptk+=wynik;

printf("Dodano punkty do puli.\nWynik gracza 1- %d\n Wynik gracza 2- %d\n", gracz_1ptk, gracz_2ptk);

printf("Czy chcesz kontynuowac dobra passe?\nWpisz y. Aby zakonczyc wpisz: n \n");

} /* zamknięcie if*/

else /* gdy wynik =1*/

{

gracz_2ptk+=gracz_1ptk;

gracz_1ptk=0;

printf("\n\n");

break;

}

} /* koniec pętli 1 gracza */

if(won==1) /* powstrzymuje wyswietlenie komunikatu o utraci/oddaniu kolejki*/

break; /* informacja o oddaniu kolejki bądź jej utracie*/

printf("\nGracz 1 %s kolejke%s Graczu 2 chcac zagrac wpisz: \n'y'\n", wynik==1? "stracil": "oddal", wynik==1? " i wszystkie swoje punkty.":".");

while((decyzja=getch())!=STOP || (decyzja=getch())==START) /* gracz 2 gra*/

{

if(gracz_1ptk >=100 || gracz_2ptk >= 100) /* warunek przypisania zmienej zwycienstwa*/

{

won=1;

}

if(won==1) /* przerwanie petnli gracza 2 */

break;

printf("Rzuca gracz 2\n\n");

wynik=rand()%6+1;

printf("Wynik rzutu %d\n", wynik);

if(wynik!=1)/* warunek uzyskaniu ptk gracz 2*/

{

gracz_2ptk+=wynik;

printf("Dodano punkty do puli.\n Wynik gracza 1- %d\nWynik gracza 2- %d\n", gracz_1ptk, gracz_2ptk);

printf("Czy chcesz kontynuowac dobra passe?\nWpisz y. Aby zakonczyc wpisz: n \n");

}

else /* gdy wynik =1*/

{

gracz_1ptk+=gracz_2ptk;

gracz_2ptk=0;

printf("\n\n");

break;

}

} /* koniec pętli gracz 2*/

if(won==1) /* powstrzymuje wyswietlenie komunikatu o utraci/oddaniu kolejki*/

break;

else

/* informacja o oddaniu kolejki bądź jej utracie*/

printf("\nGracz 2 %s kolejke%s Graczu 1 chcac zagrac wpisz: \n'y'\n", wynik==1? "stracil": "oddal", wynik==1? " i wszystkie swoje punkty.":".");

}

/* oznajmienie zwycienzcy*/

if(gracz_1ptk >=100)

printf("\n****WYGRAL GRACZ NUMER 1****\n");

if(gracz_2ptk >=100)

printf("\n****WYGRAL GRACZ NUMER 2****\n");

system("PAUSE");

return 0;

}

- Autor: Kamil Ostrowski,

#include <cstdlib>

#include <stdio.h>

#include <iostream>

#include <ctime>

#include <conio.h>

#include <stdlib.h>

using namespace std;

int random();

int wybor,wynik1,wynik2,runda,temp;

int main(int argc, char *argv[])

{

cout<<"Welcome to The Game of Pig"<<endl;

cout<<"by Kamil Ostrowski"<<endl;

cout<<endl;

temp = 0;

wynik1,wynik2 = 0;

for ( int i = 2 ; (wynik1 < 100) && (wynik2 < 100) ; i++){ //pętla główna

if ( i % 2 == 0){ // gracz nr 1 petla

replay:

cout<<" WYNIKI "<<endl;

cout<<"----------------"<<endl;

cout<<" Gracz nr 1: "<<wynik1<<endl;

cout<<" Gracz nr 2: "<<wynik2<<endl;

cout<<"----------------"<<endl;

cout<<endl;

cout<<" GRACZ NR 1"<<endl;

cout<<endl;

cout<<" Pula : "<<temp<<endl;

cout<<" 1 - rzuc kostka"<<endl<<" 2 - oddaj ture"<<endl;

cin>>wybor;

system("cls");

switch (wybor)

{

case 1 :

runda = random();

cout<<endl;

cout<<" Wylosowales : "<<"| "<<runda<<" |"<<endl;

if (runda == 1){

cout<<endl;

cout<<" THE PIG - TRACISZ PUNKTY !!!!!!!"<<endl;

cout<<endl;

temp = 0;

break;}

cout<<" dodajemy punkty"<<endl;

temp = temp + runda;

cout<<endl;

goto replay;

break;

case 2:

wynik1 = wynik1 + temp;

cout<<endl;

cout<<" Zyskales "<<temp<<" punktow "<<endl;

cout<<endl;

temp = 0;

break;

}

}

else{ // gracz nr 2 petla

replay1:

cout<<" WYNIKI "<<endl;

cout<<"----------------"<<endl;

cout<<" Gracz nr 1: "<<wynik1<<endl;

cout<<" Gracz nr 2: "<<wynik2<<endl;

cout<<"----------------"<<endl;

cout<<endl;

cout<<" GRACZ NR 2"<<endl;

cout<<endl;

cout<<" Pula : "<<temp<<endl;

cout<<" 1 - rzuc kostka"<<endl<<" 2 - oddaj ture"<<endl;

cin>>wybor;

system("cls");

switch (wybor)

{

case 1 :

runda = random();

cout<<endl;

cout<<" Wylosowales : "<<"| "<<runda<<" |"<<endl;

if (runda == 1){

cout<<endl;

cout<<" THE PIG - TRACISZ PUNKTY !!!!!!!"<<endl;

cout<<endl;

temp = 0;

break;}

cout<<" dodajemy punkty"<<endl;

temp = temp + runda;

cout<<endl;

goto replay1;

break;

case 2:

wynik2 = wynik2 + temp;

cout<<endl;

cout<<" Zyskales "<<temp<<" punktow "<<endl;

cout<<endl;

temp = 0;

break;

}

}

}

if ( wynik1>wynik2)

cout<<" GRACZ NR 1 WYGRAL"<<endl;

else

cout<<" GRACZ NR 2 WYGRAL"<<endl;

system("PAUSE");

return EXIT_SUCCESS;

}

int random(){

srand ((int) time(NULL));

int liczba = rand() % 6 + 1;

return liczba;

}

Całkowanie numeryczne – napisz program liczący pole pod wykresem funkcji za pomocą funkcji całkowania numerycznego metodą prostokątów lub metodą trapezów. Funkcję z której wylicza się wartość całki oznaczonej należy przekazać do funkcji całkującej jako parametr na przykład: float integral (float a, float b, float (*funkcja)(float));

Rzut w polu grawitacyjnym – napisz program wykorzystujący funkcję symulującą rzut w polu grawitacyjnym ciała o masie m, prędkości początkowej v oraz kącie nachylenia prędkości do kierunku poziomego alfa. Program ma wyznaczać macierz parametrów końcowych ruchu takich jak: maksymalny zasięg, maksymalna wysokość, czas lotu. Zapisuj kolejne próby do pliku tekstowego.

Rozwiązanie:

- Uwagi: program jest niepełny, brak zapisu do pliku, dwa razy liczone jest to samo,

- Zagadnienia: funkcje przyjmujące jako parametry wskaźniki (można było napisać tak aby cała tablica została przekazana jako wskaźnik),

- Autor: Mateusz Droździk

#include <iostream>

#include <math.h>

using namespace std;

void symulacja(double v,double a,double t,double * x, double * y)

{

if(t>=(2.0*v*sin(a))/9.8)

{

*x = cos(a)*v*((2.0*v*sin(a))/9.8);

*y = 0;

return;

}

*x = cos(a)*v*t;

*y = (sin(a)*v)*t-(9.8*t*t)/2.0;

}

int main()

{

double m,v,a;

cout<<"Podaj mase: "; cin>>m;

cout<<"Podaj predkosc poczatkowa: "; cin>>v;

cout<<"Podaj kat alfa: "; cin>>a;

//zmiana na radiany

a = a*M_PI/180.0;

double param[3];

param[0] = (2.0*v*sin(a))/9.8;

param[1] = ((sin(a)*v)*(sin(a)*v))/(2*9.8);

param[2] = cos(a)*v*((2.0*v*sin(a))/9.8);

cout<<"Czas: "<<param[0]<<"\n";

cout<<"Max h: "<<param[1]<<"\n";

cout<<"Max zas.: "<<param[2]<<"\n";

system("pause");

return 0;

}

- Autor: Kinga Ozimek

- Uwagi: Napisany zapis wyników do pliku tekstowego, wykorzystanie dyrektywy define, tablicy i funkcji

#include <cstdlib>

#include <iostream>

#include <math.h>

#include <conio.h>

#include <fstream>

#define PI 3.14159265

using namespace std;

float zasieg (float b, float c)

{

return b*b*sin (2*c*PI/180)/10;

}

float czas (float d, float e)

{

return 2*d*sin (e*PI/180)/10;

}

float wysokosc (float f, float k)

{

return f*f*sin (k*PI/180)*sin (k*PI/180)/(2*10);

}

float v,m,hmax,x,t;

double alfa;

float tab[3];

int main(int argc, char *argv[])

{

cout<<"podaj predkosc poczatkowa : ";

cin>>v;

cout<<"podaj mase : ";

cin>>m;

cout<<"podaj kat nachylenia : ";

cin>>alfa;

hmax = wysokosc (v,alfa);

x =zasieg(v,alfa);

t = czas(v,alfa);

tab[0] = hmax;

tab[1] = x;

tab[2] = t;

ofstream plik;

plik.open("wynik.txt", ios::out | ios::app);

if( !plik )

printf( " blad otwarcia ");

else

plik<<"max wysokosc : "<<tab[0]<<" m \n"<<"zasieg : "<<tab[1]<<" m \n"<<"czas : "<<tab[2]<<" s\n \n";

plik.close();

system("PAUSE");

return EXIT_SUCCESS;

}

Pośredni pomiar prędkości i przyśpieszenia. Zapisz w pliku tekstowym wartości kolejnych chwil czasowych oraz amplitudy przemieszczenia ruchu (może być to ruch o dowolnym opisie matematycznym na przykład sinusoidalny) w przedziale czasu od 0 do t. Następnie wykorzystaj plik aby wyliczyć wartość prędkości oraz przyśpieszenia za pomocą algorytmu różniczkowania numerycznego. Różniczkowanie numeryczne ds/dt = (s(t i + 1) – s(ti))/(t i+1-ti)

Rozwiązanie:

-Zagadnienia: tablice, czytanie z pliku, zastosowanie pętli do wykonania obliczeń,

- Uwagi: przyśpieszenie jest dobrze policzone, ale prędkość nie – powinna być także różnica kolejnych wartości a nie tylko stosunek x/t. Powinna być tablica dynamiczna, brakowało w jednym miejscu rzutowania na zmienną typu float

- Autor: Jerzy Michalik

#include <iostream>

#include <stdlib.h>

#include <math.h>

#include <stdio.h>

using namespace std;

int main()

{ /*Pośredni pomiar prędkości i przyśpieszenia.

Zapisz w pliku tekstowym wartości kolejnych chwil czasowych oraz amplitudy

przemieszczenia ruchu (może być to ruch o dowolnym opisie matematycznym na

przykład sinusoidalny) w przedziale czasu od 0 do t. Następnie wykorzystaj

plik aby wyliczyć wartość prędkości oraz przyśpieszenia za pomocą algorytmu

różniczkowania numerycznego.

Różniczkowanie numeryczne ds/dt = (s(t i + 1) - s(ti))/(t i+1-ti)*/

int t[100];

int p;

float v[100];

float r[100];

int y[100];//ewentuanie mogłyby tutaj być tablice dynamiczne ale nie starczyło mi czasu na ich zastsowanie

cout<<"Program do liczenia predkosci i przyspieszenia ruchu sinusoidalnego\n";

cout<<"Podaj do jakiego momentu czasu mam policzyc predkosc i przyspieszenie\n";

cin>> p;

if(p>100)

{cout<<"ERROR\n";

system("Pause");}

else

{

cout<<"Wypisuje momenty czasu"<<endl;

for (int i=0; i<p+1; i++)

{

t[i]=i;

cout<<t[i]<<" ";

}

cout<<"\nAmplitudy przemieszczenia ruchu "<<endl;

FILE *fp;

if ((fp=fopen("sinus2.txt", "r"))==NULL) {

printf ("Nie mogę otworzyć pliku test.txt do zapisu!\n");

exit(1);

}

else

{

for(int i = 0; i<p; i++)

{

if (feof(fp)) break;

fscanf(fp, "%d", &y[i]);

printf(" %d", y[i]);}

cout<<"\nObliczam predkosci dla kolejnych momentow czasu: \n";

for(int a=0; a<p; a++)

{ if(a==0)

{cout<<0<<" ";}

else

{(v[a])=((float)y[a])/(t[a]);

//cout<<v[a]<<" ";

printf("%f ", v[a]);

}}

cout<<"\nWyliczam przyspieszenie chwilowe dla danego momentu czasu: \n";

for(int b=0; b<p; b++)

{ if(b==0)

{cout<<0<<" ";}

else

{ r[b]=((v[b])-(v[b-1]))/((t[b])-(t[b-1]));

//cout<<r[b]<<" ";

printf("%f ", r[b]);

}}}

cout<<"\n";

fclose (fp);

system ("PAUSE");}

}

Zakres wiadomości na kolokwium:

Zmienne: int, float, double, char, short, long

Instrukcje sterujące: if, if…else if, switch… case

Pętle programowe: for, while, do… while

Funkcje : deklaracje, definicje i wywołania w programie

Tablice jednowymiarowe, dwuwymiarowe, struktury

Wskaźniki na zmienne, na tablice, na struktury

Funkcje przyjmujące wskaźniki jako argumenty

Dynamiczne tablice: funkcje malloc i free

Umiejętność zastosowania funkcji z bibliotek standardowych:

- obsługa wejścia, wyjścia konsolowego

- obsługa wejścia, wyjścia plikowego

- podstawowe funkcje matematyczne, zmienne losowe


Wyszukiwarka

Podobne podstrony:
materiały pomocnicze, Programowanie, c++
Karta programowa czysta, Uczelnia, Obróbka Ubytkowa, Materiały pomocnicze
Materiały pomocnicze, ZadaniaINF2, Zadania - pętle programowe
Materialy pomocnicze prezentacja maturalna
Materialy pomocnicze do cwiczen Statystyka cz I
obciazenia wiatr snieg materiały pomocnicze z budownictwa ogólnego
Materiał pomocniczy, Szkoła, wypracowania, ściągi
sciaga z ESP, Uczelnia, Technologia budowy maszyn, Materiały pomocnicze
Materiały pomocne przy nauce podsumowanie powyższych wykładów wersja mini
Materialy pomocnicze cardan AG Nieznany
Materialy pomocnicze 4 id 28534 Nieznany
Ciania PKM, Materiały pomocnicze do projektowania
Kruszarka Jednowalcowa, Uczelnia, Technologia budowy maszyn, Materiały pomocnicze
A.Materiały pomocnicze, BMR, Broń Jądrowa
Motyw dziecka, Materiały pomocnicze, Motywy literackie
Materialy, MBM PWR, Materiałoznawstwo, Materiały pomocnicze
cwiczenie nr 1 materialy pomocn Nieznany

więcej podobnych podstron