• Nie Znaleziono Wyników

Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 1.

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 1."

Copied!
1
0
0

Pełen tekst

(1)

Algorytmy i struktury danych, USM, zaoczne. Ćwiczenie 1.

Podstawy programowania

Cel ćwiczenia: Powtórzenie wiadomości dotyczących programowania z wykorzystaniem języków algorytmicznych. Podstawowe elementy języka C/C++ stosowane w programowaniu strukturalnym. Stałe i zmienne. Operacje wejścia i wyjścia. Instrukcje decyzyjne. Instrukcje iteracyjne. Funkcje. Tablice. Struktury i tablice struktur. Pliki. Uruchamianie prostych programów. Pomiar czasu realizacji instrukcji programu.

1. Założyć własny katalog do przechowywania plików z programami w języku C/C++

(pliki z rozszerzeniem *.cpp). Uruchomić system C++Builder. Zapoznać się z menu głównym oraz systemem pomocy (Help, F1). Zamknąć wszystkie aktywne okna (Close All). Utworzyć nowy projekt wybierając opcję File-New-Other-ConsoleWizard (bez podawania źródła projektu). Zapisać domyślny projekt w swoim katalogu pod wybraną nazwą (Save Project As), np. z1. W okienku edytora zredagować program drukujący na ekranie napis: ”To jest linia 1” (wykorzystać funkcję standardową printf z biblioteki stdio). Przed uruchomieniem zapisać program (File-Save).

#include <stdio.h>

void main(void) {

printf("To jest linia 1\n"); // printf - wyprowadzanie tekstu na ekran; język C/C++

getchar(); // oczekiwanie na enter }

Skompilować moduł z programem (Project-Compile, Alt-F9) lub wszystkie zmodyfikowane moduły (Project-Make, Ctrl-F9). Uruchomić program (Run, F9). Zmienić kod źródłowy programu tak, aby numer linii był wyświetlany za pomocą zmiennej, zawierającej numer linii. Wydrukować na ekranie kilka linii z kolejnymi numerami (wykorzystać kopiowanie linii lub instrukcję pętli). Dołączyć funkcję czyszczenia ekranu - clrscr()

(biblioteka conio) oraz zatrzymania programu po wydrukowaniu każdej linii (wykorzystać funkcję getch() lub getchar()). Wykonać program „krokowo” (F8, F7, F4).

2. Opracować program, który oblicza iloczyn dwóch liczb rzeczywistych a, b typu float wczytywanych z klawiatury za pomocą funkcji scanf(). Wynik wyprowadzić na ekran w formacie uwzględniającym zadaną liczbę miejsc po przecinku, np. printf (”%*.*f\n”, s, d, wynik); gdzie int s określa liczbę pól na ekranie przeznaczonych dla zmiennej wynik, natomiast int d jest liczbą miejsc po przecinku (np. s=9, d=2; s>d; dla s<=d szerokość nie jest uwzględniana). Wydrukować to samo za pomocą printf (”%9.2f\n”, wynik). Wykonać program krokowo za pomocą F8. Zmodyfikować program w taki sposób, aby parametry formatowania wydruku zmiennej wynik (zmienne s i d) były wprowadzane z klawiatury, np. wczytywane za pomocą funkcji scanf.

3. Zdefiniować następujące zmienne inicjowane o typach prostych:

char c = 65;

unsigned char d = 200;

int e = 32000;

unsigned f = 50000;

(2)

long g = 3000000000;

unsigned long xl = 4000000000;

float xf = 6.123456789F;

double xd = 6.1234567890123456789;

long double xld = 6.1234567890123456789012L;

Wyprowadzić zmienne na ekran za pomocą funkcji printf(). Dla liczb zmiennoprzecinkowych dobrać format wydruku tak, aby wyprowadzić możliwie największą liczbę cyfr dokładnych.

4. Opracować funkcję, która dla n będącego jej parametrem oblicza sumę:

S(n) = 1 - 1/2 + 1/4 - 1/6 + ... 1/k , gdzie k <=n.

Na przykład, n = 1; S(1) = 1; n = 2; S(2) = 1 - 1/2; n = 3; S(3) = 1 - 1/2;

n = 4; S(4) = 1 - 1/2 + 1/4; n = 5; S(5) = 1 - 1/2 + 1/4.

Nagłówek funkcji: void s1(int n, float * wyn).

5. Opracować funkcję, która wyznacza n pierwszych wyrazów szeregu przybliżającego wartość sin(x) dla x typu rzeczywistego. Przyjąć, że x oraz n są argumentami funkcji S.

S(x,n) = x

1

/ 1! - x

3

/ 3! + x

5

/ 5! - x

7

/ 7! + ...  x

(2n-1)

/ (2n-1)!

Wartości n są liczbami naturalnymi (n=1, 2, 3, ...). Porównać wartość funkcji S(x,n) dla wybranych x i n (np. x=2; n=8) z wartością standardowej funkcji sin(x). Dla dużych n powinno być sin(x)  S(x,n).

6. Zdefiniować typ ttab (typedef) określający tablicę liczb całkowitych o rozmiarze N, gdzie N - stała. W programie głównym zadeklarować zmienną tablicową A typu ttab.

Opracować funkcje:

a) inicjującą tablicę losowymi liczbami całkowitymi należącymi do przedziału [-10, 10) (wykorzystać funkcje randomize() oraz random() lub rand());

b) wyprowadzającą na ekran elementy tablicy tab[i] - po 10 w wierszu na 5 polach;

c) obliczającą sumę elementów tablicy;

d) znajdującą w tablicy element minimalny i maksymalny.

Wywołać opracowane funkcje w programie.

7. Zdefiniować typ strukturalny struct tosoba { char naz[20];

long id;

};

Zdefiniować zmienną stud typu tosoba.

a) Opracować funkcję inicjującą pola struktury typu tosoba danymi wprowadzanymi z klawiatury (parametrem funkcji jest zmienna typu tosoba).

b) Opracować funkcję wyprowadzającą zawartość struktury typu tosoba na ekran (parametrem funkcji jest zmienna typu tosoba).

Zainicjować zmienną stud wartościami i wyprowadzić jej zawartość na ekran.

8. Przeanalizować program umożliwiający pomiar czasu. Wykorzystać funkcję czas do pomiaru czasu realizacji pętli o zadanej liczbie kroków (w przypadku zbyt krótkiego czasu realizacji zagnieździć kilka pętli, np. powtarzanie instrukcji gotoxy(1,1) w pętli).

Zrealizować inny wariant pomiaru czasu za pomocą funkcji clock().

(3)

//---

#include <vcl.h>

#include <dos.h>

#include <stdio.h>

#include <conio.h>

#pragma hdrstop

double czas(unsigned h, unsigned m, unsigned s,unsigned ds) {

return (60*long(h)+m)*60+s+ds*0.01;

}

unsigned h1,h2, m1,m2, s1,s2, hund1,hund2;

double a,b;

long i;

//--- int main(void)

{

struct time t;

clrscr();

// Pomiar czasu przed operacjami

gettime(&t); h1=t.ti_hour; m1=t.ti_min; s1=t.ti_sec; hund1=t.ti_hund;

// Wykonywane operacje for (i=1; i<400000; i++) { // instrukcje ...

gotoxy(10,10); }

// Pobranie czasu zakonczenia operacji

gettime(&t); h2=t.ti_hour; m2=t.ti_min; s2=t.ti_sec; hund2=t.ti_hund;

a=czas(h1,m1,s1,hund1); b=czas(h2,m2,s2,hund2);

// Wyznaczenie czasu trwania operacji

printf("Czas trwania operacji w sekundach = %.2lf\n",(b-a));

getch();

return 0;

}

//---

Cytaty

Powiązane dokumenty

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym

Dowód przez indukcję ze względu na liczbę wywołań rekurencyjnych funkcji min_max.. Dla jednego tylko wywołania

Problem Dany jest ciąg rosnący e[1],..,e[n] oraz element x pewnej przestrzeni liniowo uporządkowanej &lt;E, &gt;. Następnie porównujemy x z kolejnymi elementami ciągu

Algorytm sortowania przez wstawianie poprawnie rozwiązuje problem sortowania w każdej liniowo uporządkowanej strukturze danych.. Algorytm sortowania przez wstawianie jest, w

Każde drzewo decyzyjne dla algorytmu sortującego ciąg n- elementowy przez porównywanie elementów, ma co najmniej wysokość log

Obliczanie wartości wyrażeń.. Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów, a kolejno spotkane operacje wpisujemy na stos

Zadanie Do zbioru reprezentowanego przez drzewo D dołączyć element e, o ile nie należy on jeszcze do etykiet drzewa D.... Zastosowanie: wyszukiwanie

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym