Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
20.05.2015
Размер:
2.53 Mб
Скачать

Программирование на языке Си

Часть II

Тема 7. Практикум

(моделирование)

© К.Ю. Поляков, 2007

52

Моделирование кипения воды

Задача: Построить компьютерную модель кипения воды.

Хранение данных: координаты (центров) пузырьков хранятся в массивах X и Y:

X[i], Y[i] – координаты центра пузырька с номером i.

53

Структура программы

#include <graphics.h>

глобальные

#include <conio.h>

константы и

#include <dos.h>

переменные

#include <stdlib.h>

объявления

const N = 100;

процедур

int X[N], Y[N], r = 3;

 

void Init

(); // начальное положение

void Draw

(

int color ); // рисуем, стираем

void Sdvig ( int dy );

// летят вверх

void Zamena

();

// ушли, пришли

void main()

 

 

{

 

 

 

int d =

DETECT, m;

 

initgraph ( &d, &m, "c:\\borlandc\\bgi" );

... // здесь основная часть программы closegraph();

}

... // здесь сами процедуры

основная

программа

54

Основная программа

Init();

// начальная расстановка

while (

1 )

выход по Esc

{

 

(код 27)

if ( kbhit() )

 

if ( getch() == 27 ) break;

Draw ( YELLOW );

// рисуем все пузырьки

delay

( 10 );

 

Draw ( BLACK );

// стираем все пузырьки

Sdvig

( 4 );

// вверх на 4 пикселя

Zamena();

// если за пределами экрана…

}

 

 

55

Процедура Init

Начальная расстановка:

случайное положение в пределах экрана.

 

640

Интервал для x: [r, 640-r]

 

 

r

 

X[i] = random(640 - 2*r) + r;

480

void Init()

{

Интервал для y: [r, 480-r]

Y[i] = random(480 - 2*r) + r;

int i;

for ( i = 0; i < N; i ++ )

{

X[i] = random(640 - 2*r) + r;

Y[i] = random(480 - 2*r) + r;

}

}

56

Процедуры Draw, Sdvig

Рисование и стирание:

void Draw ( int color )

{

int i;

setcolor ( color );

for ( i = 0; i < N; i ++ ) circle ( X[i], Y[i], r );

}

Сдвиг вверх:

void Sdvig ( int dy )

{

int i;

for ( i = 0; i < N; i ++ )

Y[i] -= dy;

}

57

Процедура Zamena

Замена вышедших за границы экрана:

 

 

Условие выхода:

 

Y[i]< r

if ( Y[i] < r ) { ... }

480

 

Y[i] = 480 - r

Перебросить вниз:

 

X[i] = random(640 - 2*r) + r;

 

 

Y[i] = 480 – r;

void Zamena ()

{

int i;

for ( i = 0; i < N; i ++ ) if ( Y[i] < r ) {

X[i] = random(640 - 2*r) + r; Y[i] = 480 - r;

}

}

58

Задания

"4":

"5":

Моделирование кипения воды в стакане (синий фон, рамка):

Моделирование двустороннего потока: часть частиц двигаются влево, часть – вправо.

Программирование на языке Си

Часть II

Тема 8. Символьные строки

© К.Ю. Поляков, 2007

60

Чем плох массив символов?

Это массивы символов:

char A[4] = { 'A', '3', '[', 'Ж'}; char B[10];

Для массива:

каждый символ – отдельный объект;

массив имеет длину N, которая задана при объявлении

Что нужно:

обрабатывать последовательность символов как единое целое

строка должна иметь переменную длину

61

Символьные строки

char s[80];

s[3]

0

признак окончания строки: символ с кодом 0

П р и в е т ! \0 ¤ ¤ ¤ ¤ ¤

 

 

 

часть

 

 

 

s[0] s[1]

!

 

 

 

 

Символ '\0' имеет код 0

 

 

 

 

 

 

символ '0' имеет код 48

 

 

 

 

 

 

 

Символьная строка – это последовательность символов, которая заканчивается символом '\0'.

62

Объявление символьных строк

Объявить строку = выделить ей место в памяти и

присвоить имя. выделяется 80 байт, в

строке – «мусор» (если она

глобальная, то нули '\0‘)

char s[80];

выделяется 80 байт,

 

 

занято 4 байта

char s1[80] = "abc";

(с учетом '\0')

 

 

выделяется 5 байт

char qqq[] = "Вася";

(с учетом '\0')

 

!При выделении памяти надо учитывать место для '\0'.

В строку нельзя записывать больше символов, чем выделено памяти.

63

Ввод и вывод символьных строк

Задача: ввести слово с клавиатуры и заменить все буквы "а" на буквы "б".

void main()

%s – формат для ввода и

{

вывода символьных строк

q[80];

(выводится только часть до '\0'

начали с

 

 

q[0]

пока не дошли до

&:

 

"%s"

конца строки

q &q[0]

 

 

i = 0;

 

 

while ( q[i] != '\0' ) {

 

if (

 

переход к

i ++;

 

 

следующему

}

 

 

символу

printf ( "Результат: %s ", q );

}

Соседние файлы в папке ПОЛЯКОВ_ПРЕЗЕНТАЦИИ_С++