AsD L7

background image

Algorytmy, struktury danych i

Algorytmy, struktury danych i

techniki programowania.

techniki programowania.

Laboratorium z podstaw programowania w j

Laboratorium z podstaw programowania w j

ę

ę

zyku ANSI C

zyku ANSI C

background image

Zadanie

Zadanie

Prosz

Prosz

ę

ę

napisa

napisa

ć

ć

program, kt

program, kt

ó

ó

ry wpisuje do tablicy 100 element

ry wpisuje do tablicy 100 element

ó

ó

w typu

w typu

int

int

losowe liczby ca

losowe liczby ca

ł

ł

kowite z przedzia

kowite z przedzia

ł

ł

u od

u od

-

-

20 do 20 a nast

20 do 20 a nast

ę

ę

pnie oblicza

pnie oblicza

ś

ś

redni

redni

ą

ą

arytmetyczn

arytmetyczn

ą

ą

element

element

ó

ó

w dodatnich o indeksach nieparzystych.

w dodatnich o indeksach nieparzystych.

Wylosowane liczby oraz

Wylosowane liczby oraz

ś

ś

redni

redni

ą

ą

wy

wy

ś

ś

wietli

wietli

ć

ć

na ekranie. Zadeklarowa

na ekranie. Zadeklarowa

ć

ć

rozmiar tablicy za pomoc

rozmiar tablicy za pomoc

ą

ą

sta

sta

ł

ł

ej przy u

ej przy u

ż

ż

yciu dyrektywy #

yciu dyrektywy #

define

define

.

.

Umie

Umie

ś

ś

ci

ci

ć

ć

w programie instrukcj

w programie instrukcj

ę

ę

kt

kt

ó

ó

ra przy ka

ra przy ka

ż

ż

dym uruchomieniu

dym uruchomieniu

automatycznie zmienia ziarno losowania.

automatycznie zmienia ziarno losowania.

background image

Rozwi

Rozwi

ą

ą

zanie

zanie

background image

#include

<stdio.h>

#include

<stdlib.h>

#include

<time.h>

#define

ROZMIAR 100

#define

DOL -20

#define

GORA 20

int

main(

void

){

int

tab_los[ROZMIAR], i, suma, ile;

srand((

unsigned

)time(0));

// losowe ziarno

printf(

"Liczby losowe:\n"

);

for

(i = 0; i < ROZMIAR; ++i ){

tab_los[i] = DOL + rand() % ((GORA - DOL) + 1);
printf(

" %d = % d \n"

,i , tab_los[i]);

}
suma = 0;
ile = 0;

for

(i = 1; i < ROZMIAR; i += 2 ){

// iteracja po indeksach

// nieparzystych

if

(tab_los[i] > 0){

suma += tab_los[i];

// sumowanie liczb dodatnich

++ile;

//zliczanie ilości liczb dodatnich

}

}
printf(

"\nSrednia wynosi: %lf\n"

, (

double

)suma/(

double

)ile);

return

0;

}

background image

Tablice 2

Tablice 2

-

-

wymiarowe: macierze

wymiarowe: macierze

Tablice dwuwymiarowe czyli macierze deklarujemy podobnie jak wek

Tablice dwuwymiarowe czyli macierze deklarujemy podobnie jak wek

tory, (tablice

tory, (tablice

jednowymiarowe) podaj

jednowymiarowe) podaj

ą

ą

c typ danych w tablicy, nazw

c typ danych w tablicy, nazw

ę

ę

tablicy i rozmiar tablicy w

tablicy i rozmiar tablicy w

nawiasach kwadratowych (najpierw liczb

nawiasach kwadratowych (najpierw liczb

ę

ę

wierszy, potem liczb

wierszy, potem liczb

ę

ę

kolumn).

kolumn).

Przyk

Przyk

ł

ł

ad:

ad:

int

int

macierz_1[3][5];

macierz_1[3][5];

double

double

mac_2[5][2];

mac_2[5][2];

lub wygodniej i bardziej uniwersalnie:

lub wygodniej i bardziej uniwersalnie:

#

#

define

define

WIERSZE 4

WIERSZE 4

// liczba wierszy macierzy mac

// liczba wierszy macierzy mac

#

#

define

define

KOLUMNY 7

KOLUMNY 7

// liczba kolumn macierzy mac

// liczba kolumn macierzy mac

int

int

main(

main(

void

void

){

){

float

float

mac[WIERSZE][KOLUMNY

mac[WIERSZE][KOLUMNY

];

];

return

return

0;

0;

}

}

background image

Tablice 2

Tablice 2

-

-

wymiarowe: macierze

wymiarowe: macierze

Zadeklarowana wewn

Zadeklarowana wewn

ą

ą

trz funkcji

trz funkcji

main

main

() macierz ma (podobne jak inne zmienne

() macierz ma (podobne jak inne zmienne

automatyczne) elementy o warto

automatyczne) elementy o warto

ś

ś

ciach przypadkowych. Trzeba tak

ciach przypadkowych. Trzeba tak

ą

ą

macierz

macierz

zainicjalizowa

zainicjalizowa

ć

ć

(podobnie jak ka

(podobnie jak ka

ż

ż

d

d

ą

ą

zmienn

zmienn

ą

ą

wewn

wewn

ą

ą

trz funkcji

trz funkcji

main

main

()) czyli

()) czyli

przypisa

przypisa

ć

ć

warto

warto

ś

ś

ci elementom macierzy.

ci elementom macierzy.

Mo

Mo

ż

ż

na to zrobi

na to zrobi

ć

ć

ju

ju

ż

ż

przy deklaracji macierzy za

przy deklaracji macierzy za

pomoc

pomoc

ą

ą

listy warto

listy warto

ś

ś

ci w nawiasach klamrowych:

ci w nawiasach klamrowych:

#

#

define

define

WIERSZE 3

WIERSZE 3

// liczba wierszy macierzy mac

// liczba wierszy macierzy mac

#

#

define

define

KOLUMNY 5

KOLUMNY 5

// liczba kolumn macierzy mac

// liczba kolumn macierzy mac

int

int

main(

main(

void

void

){

){

int

int

mac[WIERSZE][KOLUMNY

mac[WIERSZE][KOLUMNY

] = {{10, 5, 13, 28, 6},

] = {{10, 5, 13, 28, 6},

{ 8, 1, 19, 32, 5},

{ 8, 1, 19, 32, 5},

{45, 48, 2, 6, 16}};

{45, 48, 2, 6, 16}};

return

return

0;

0;

}

}

Przecinki pomi

ę

dzy

elementami i na ko

ń

cu

ka

ż

dej listy !

background image

Tablice 2

Tablice 2

-

-

wymiarowe: macierze

wymiarowe: macierze

Do operowania na elementach macierzy najcz

Do operowania na elementach macierzy najcz

ęś

ęś

ciej u

ciej u

ż

ż

ywa si

ywa si

ę

ę

dw

dw

ó

ó

ch p

ch p

ę

ę

tli (jedna

tli (jedna

wewn

wewn

ą

ą

trz drugiej). Zewn

trz drugiej). Zewn

ę

ę

trzna p

trzna p

ę

ę

tla przeskakuje po wierszach a wewn

tla przeskakuje po wierszach a wewn

ę

ę

trzna po

trzna po

elementach w wierszu lub odwrotnie (zewn

elementach w wierszu lub odwrotnie (zewn

ę

ę

trzna po kolumnach a wewn

trzna po kolumnach a wewn

ę

ę

trzna po

trzna po

elementach w kolumnie).

elementach w kolumnie).

Najwygodniej u

Najwygodniej u

ż

ż

y

y

ć

ć

do tego celu p

do tego celu p

ę

ę

tli

tli

for

for

poniewa

poniewa

ż

ż

grupuje ona wszystkie warunki

grupuje ona wszystkie warunki

steruj

steruj

ą

ą

ce p

ce p

ę

ę

tl

tl

ą

ą

w jednej zwi

w jednej zwi

ę

ę

z

z

ł

ł

ej linii.

ej linii.

for

for

(

(

){

){

for

for

(

(

){

){

instrukcje;

instrukcje;

}

}

}

}

7

2

1

8

6

4

8

3

2

2

1

0

9

4

5

3

3

1

0

4

6

8

5

3

1

background image

Macierze

Macierze

-

-

wpisywanie warto

wpisywanie warto

ś

ś

ci

ci

#include

<stdio.h>

#define

WIERSZE_1

5

//liczba wierszy macierzy mac_1

#define

KOLUMNY_1

5

//liczba kolumn macierzy mac_1

int

main(

void

){

int

mac_1[WIERSZE_1][KOLUMNY_1];

int

i, j;

//zestaw 2 pętli do wpisywania wartości do macierzy

for

( i = 0; i < WIERSZE_1; ++i ){

//pierwsza pętla przeskakuje po wierszach

for

( j = 0; j < KOLUMNY_1; ++j ){

//druga pętla przeskakuje po elementach w wierszu

mac_1[i][j] = i+j;

//element przyjmuje wartość sumy wartości
//jego indeksów

}

}

return

0;

}

Sprawd

ź

my jak to zadziała

background image

Macierze

Macierze

-

-

wpisywanie warto

wpisywanie warto

ś

ś

ci

ci

#include

<stdio.h>

#define

WIERSZE_3

2

//liczba wierszy macierzy mac_1

#define

KOLUMNY_3

3

//liczba kolumn macierzy mac_1

int

main(

void

){

int

mac_3[WIERSZE_3][KOLUMNY_3];

int

i, j;

//Wpisywanie elementów macierzy z klawiatury

printf(

"Wczytuje elementy macierzy z klawiatury "

);

printf(

"kolejno wierszami...\n"

);

for

( i = 0; i < WIERSZE_3; ++i ){

printf(

"Wiersz %d:\n"

, i);

for

( j = 0; j < KOLUMNY_3; ++j )

scanf(

"%d"

,&mac_3[i][j]);

}

return

0;

}

Sprawd

ź

my jak to zadziała

background image

Macierze

Macierze

wy

wy

ś

ś

wietlanie warto

wietlanie warto

ś

ś

ci

ci

.
.
.

//zestaw 2 pętli do wyświetlenia wartości do macierzy

for

( i = 0; i < WIERSZE_3; ++i ){

for

( j = 0; j < KOLUMNY_3; ++j ){

printf(

" %3.1d\t "

, mac_3[i][j]);

}
printf(

"\n"

);

}
printf(

"\n"

);

.
.
.

Sprawd

ź

my jak to zadziała

background image

Macierze

Macierze

sumowanie element

sumowanie element

ó

ó

w

w

// na początku trzeba zadeklarować zmienne
// suma_wszystkich i suma_diag

suma_wszystkich = suma_diag = 0;

for

( i = 0; i < WIERSZE_1; ++i ){

for

( j = 0; j < KOLUMNY_1; ++j ){

suma_wszystkich += mac_1[i][j];

// sumowanie wszystkich elementów macierzy

if

( i == j )

suma_diag += mac_1[i][j];

// sumowanie elementów leżących na
// przekątnej głównej macierzy

}

}
printf(

"Suma elem. mac_1: %d\n"

, suma_wszystkich);

printf(

"Suma elem. diagonali mac_1: %d\n"

, suma_diag);

Sprawd

ź

my jak to zadziała

background image

Sumowanie element

Sumowanie element

ó

ó

w w wierszu lub w kolumnie

w w wierszu lub w kolumnie

/* Przygotowanie macierzy sum. Na początku trzeba zadeklarować

mac_sum[WIERSZE_SUM][KOLUMNY_SUM] i ją zainicjalizować.

KOLUMNY_SUM muszą być równe max(WIERSZE_1, KOLUMNY_1) */

for

( i = 0; i < WIERSZE_SUM; ++i )

for

( j = 0; j < KOLUMNY_SUM; ++j )

mac_sum[i][j] = 0;

//wypełnienie macierzy zerami

//sumowanie elemenów macierzy mac_1

for

( i = 0; i < WIERSZE_1; ++i )

for

( j = 0; j < KOLUMNY_1; ++j )

mac_sum[0][i] += mac_1[i][j];

//sumy z każdego wiersza mac_1 wpisujemy w
//kolejnych elementach 0-wego wiersza macierzy sum

for

( j = 0; j < KOLUMNY_1; ++j ){

for

( i = 0; i < WIERSZE_1; ++i ){

mac_sum[1][j] += mac_1[i][j];

//sumy z każdej kolumny mac_1 wpisujemy w
//kolejnych elementach 1-szego wiersza macierzy sum

//dalszy ciąg na następnym slajdzie

background image

Sumowanie element

Sumowanie element

ó

ó

w w wierszu lub w kolumnie

w w wierszu lub w kolumnie

//Wyświetlenie na ekranie macierzy sum

printf(

"Macierz mac_sum:\n"

);

for

( i = 0; i < WIERSZE_SUM; ++i ){

for

( j = 0; j < KOLUMNY_SUM; ++j ){

printf(

" %3.1d\t "

, mac_sum[i][j]);

}

if

( i == 0 )

//dla pierwszego wiersza mac_sum

printf(

" -> sumy wierszy mac_1\n"

);

else

//dla drugiego wiersza mac_sum

printf(

" -> sumy kolumn mac_1\n"

);

}
printf(

"\n"

);

Sprawd

ź

my jak to zadziała

background image

Macierze

Macierze

szukanie min, max

szukanie min, max

#include

<stdio.h>

#define

WIERSZE_2

3

//liczba wierszy macierzy mac_2

#define

KOLUMNY_2

6

//liczba kolumn macierzy mac_2

int

main(

void

){

int

mac_2[WIERSZE_2][KOLUMNY_2] = { {13, 55, 64, 18, 20, 71},

{22, 6, 4, 3, 15, 43},
{33, 7, 78, 12, 6, 75} };

int

i, j, min, max;

//wyszukiwanie minimum i maksimum w macierzy

min = max = mac_2[0][0];

for

( i = 0; i < WIERSZE_2; ++i ){

for

( j = 0; j < KOLUMNY_2; ++j ){

if

( mac_2[i][j] < min )

min = mac_2[i][j];

if

( mac_2[i][j] > max )

max = mac_2[i][j];

}

}
printf(

"Minimum z mac_2 wynosi: %d\n"

, min);

printf(

"Mmaksimum z mac_2 wynosi: %d\n"

, max);

return

0;

}

Sprawd

ź

my jak to zadziała

background image

Dodawanie macierzy

Dodawanie macierzy

#include

<stdio.h>

//Macierze, które chcemy dodać muszą mieć takie same wymiary!

#define

WIERSZE 3

//liczba wierszy w macierzach

#define

KOLUMNY 3

//liczba kolumn w macierzach

int

main(

void

){

//deklaracje zmiennych

int

m_1[WIERSZE][KOLUMNY] = {{5, 9, 1},{1, 2, 1},{9, 8, 3}};

int

m_2[WIERSZE][KOLUMNY] = {{6, 5, 2},{9, 3, 5},{3, 8, 1}};

int

m_s[WIERSZE][KOLUMNY];

int

i, j;

//dodawanie macierzy

for

( i = 0; i < WIERSZE; ++i )

for

( j = 0; j < KOLUMNY; ++j )

m_s[i][j] = m_1[i][j] + m_2[i][j];

//wyświetlenie wyniku na ekranie

printf(

"m_1 + m_2:\n"

);

for

( i = 0; i < WIERSZE; ++i ){

for

( j = 0; j < KOLUMNY; ++j )

printf(

" %3.1d\t "

, m_s[i][j]);

printf(

"\n"

);

}
printf(

"\n"

);

return

0;

}

Sprawd

ź

my jak to zadziała

background image

Mno

Mno

ż

ż

enie macierzy

enie macierzy

#include

<stdio.h>

#define

WIERSZE_MA

4

//liczba wierszy macierzy ma

#define

KOLUMNY_MA

3

//liczba kolumn macierzy ma

#define

WIERSZE_MB

3

//liczba wierszy macierzy mb

#define

KOLUMNY_MB

5

//liczba kolumn macierzy mb

#define

WIERSZE_MC

4

//liczba wierszy macierzy mc

#define

KOLUMNY_MC

5

//liczba kolumn macierzy mc

int

main(

void

){

//deklaracje zmiennych

int

ma[WIERSZE_MA][KOLUMNY_MA] = {{5, 9, 1},

{1, 2, 1},
{9, 8, 3},
{5, 5, 4} };

int

mb[WIERSZE_MB][KOLUMNY_MB] = { {6, 5, 2, 1, 3},

{0, 3, 9, 3, 5},
{3, 4, 1, 8, 1} };

int

mc[WIERSZE_MC][KOLUMNY_MC];

int

i, j, k, temp;

// ciąg dalszy na następnym slajdzie

background image

Mno

Mno

ż

ż

enie macierzy

enie macierzy

//dokończenie
//wyświetlenie macierzy ma na ekranie

printf(

"ma:\n"

);

for

( i = 0; i < WIERSZE_MA; ++i ){

for ( j = 0; j < KOLUMNY_MA; ++j )

printf(

" %3.1d\t "

, ma[i][j]);

printf(

"\n"

);

}

//wyświetlenie macierzy mb na ekranie

printf(

"mb:\n"

);

for

( i = 0; i < WIERSZE_MB; ++i ){

for

( j = 0; j < KOLUMNY_MB; ++j )

printf(

" %3.1d\t "

, mb[i][j]);

printf(

"\n"

);

}

//dalszy ciąg na następnym slajdzie

background image

Mno

Mno

ż

ż

enie macierzy

enie macierzy

//dokończenie
//mnożenie macierzy

for

( i = 0; i < WIERSZE_MA; ++i ){

for

( j = 0; j < KOLUMNY_MB; ++j ){

temp = 0;

for

( k = 0; k < WIERSZE_MB; ++k)

temp += ma[i][k] * mb[k][j];

mc[i][j] = temp;

}

}
printf(

"ma * mb:\n"

);

//wyświetlenie wyniku na ekranie

for

( i = 0; i < WIERSZE_MA; ++i ){

for

( j = 0; j < KOLUMNY_MB; ++j )

printf(

" %3.1d\t "

, mc[i][j]);

printf(

"\n"

);

}
printf(

"\n"

);

return

0;

}

Sprawd

ź

my jak to zadziała

Zagnie

ż

d

ż

enie

trzech p

ę

tli

background image

Dzi

Dzi

ę

ę

kuje za uwag

kuje za uwag

ę

ę

.

.

Najlepsz

Najlepsz

ą

ą

metod

metod

ą

ą

nauczenia si

nauczenia si

ę

ę

programowania.

programowania.

Jest pisanie program

Jest pisanie program

ó

ó

w.

w.

>>Trening czyni mistrza <<

>>Trening czyni mistrza <<


Wyszukiwarka

Podobne podstrony:
ASD od z Sawanta II Wykład17 6
ASD 2012 test6
nw asd w13
ipp2p L7
teoria asd, stud, II semestr, ASD
L7 I2Y3S1 7
asd
ASD w5
ASD Exercise 2
ASD w12
nOTATKI, L7 ' English Disease'
Egzamin ASD 2010
ASD w3
ASD, AGH, Semestr 5, mechanika płynów, akademiki, Mechanika Płynów, Mechanika płynów, ==Mech.płynow
ASD, algorytmybymonika, PYTANIE 1
ASD w10%2Cw11
nw asd w6

więcej podobnych podstron