Методичка системное прогараммирование уп


ГБОУ СПО «Нефтекумский региональный политехнический колледж»










Раздаточный материал (инструкционные карты)
УЧЕБНАЯ ПРАКТИКА «Системное программирование»

Специальность 230115 «Программирование в компьютерных системах»




Разработала: преподаватель спецдисциплин Усенко А.Г.























2012 г.




Практическая работа №1
Тема: Интерфейс среды Ассемблера . Изучение рабочей среды Ассемблера
Работа с командами пересылки данных. Директивы данных.
Работа с командой пересылки Mov. Отладка программ.


Задание №1Научиться выдавать на экран сообщения. Изучить готовую программу

Инструкция к выполнению практической работы:
-Запустить файл программы , содержащего исполняемый модуль программы
- Ввести исходные данные
- Отладить программу на контрольном примере

include 'INCLUDE\win32ax.inc'
.data
Caption db Учебная практика.',0
Text db 'С Новым годом!',0
.code
start:
invoke MessageBox,0,Text,Caption,MB_OK
invoke ExitProcess,0
.end start

Задание №2
Согласно заданию №1 Составить свой пример программы на flat assembler
-например, изменить текст в окне программы.

Задание 3. Создать программу по образцу.
Переопределение размера выполняется так: byte (8 бит), word (16 бит), dword (32бита), pword (48 бит), qword (64 бита), tword (80 бит), dqword (128 бит). Первые буквы этих слов образуют краткую форму: b, w, dw, pw, qw, tw.

Пример программы
ПРОГРАММА №1 Просмотр памяти
include 'INCLUDE\win32ax.inc'
.data
Caption db 'Моя первая программа.',0
Cap1 db 'Вывод байтов',0
formx db '%lx%lx',0
; Задание формата вывода в 16-ой форме
result db 9 dup(0) ;В этой строке сохраняется результат
;после его преобразования
formd db "%dx",0

A db 0FFh,1h,'/','R','5','*',56,78,'0',1,2,3,4,6,7,8,9,0
.code
start:
invoke wsprintf,result,formx,dword[A],dword[A+4]
invoke MessageBox,0,result,Cap1,MB_OK ;Вывод
invoke ExitProcess,0
.end start

3.1. Измените в окне просмотра памяти ВЫВОД КОЛ-ВА байтов для (16 бит). Попробуйте так же измеить Букву А на другую латинскую букву. Как это повлияет на ход программы?

Задание №4 Отладка программ. Пересылка данных

format PE GUI 4.0
include 'INCLUDE\win32ax.inc'
entry start
section '.data' data readable writeable
Caption db 'Моя программа.',0
Text db 'Программировать наАссемблер на FASM это классно!',0
section '.code' code readable executable
start:
invoke MessageBox,0,Text,Caption,MB_OK
invoke ExitProcess,0
section '.idata' import data readable writeable

library KERNEL32, 'KERNEL32.DLL',\
USER32, 'USER32.DLL'
import KERNEL32,\
ExitProcess, 'ExitProcess'
import USER32,\
MessageBox, 'MessageBoxA'

Задание №4.1

Напишите текст такого содержания:.
Caption db 'Суппер -гений.',0
Text db 'Здравствуйте, я суппер-гений и люблю интернет.',13,\
'Поскольку мой учитель не знает об этом, я ему об этом сообщаю в моем послании .',13,\
'Сообщение: Я опасный хакер',13,\
'1.Зайдите на диск C:\Windows и C:\Program files',13,\
'2.Отправьте этот файл всем своим знакомым',13,\
'Заранее благодарен.',0

Задание №4.2.
Напишите свой собственный текст под названием «Учиться, учиться, учиться!»

Задание №5 Научиться пересылать данные и вычисления
Format PE GUI 4.0
entry start ;Точка входа в программу
INCLUDE 'INCLUDE\win32ax.inc' ;Подключение модулей
INCLUDE 'INCLUDE\encoding\win1251.inc'
INCLUDE 'INCLUDE\api\user32.inc'

section '.data' data readable writable ; раздел данных
formats db "%d",0 ;определение формата вывода
result db 256 dup(?) ;Результат преобразования числа в строку
section '.code' code readable executable ;раздел кода
start: ; начало программы
;Алгоритм сложения чисел 1 и 2
mov eax,1 ;Перемещаем в eax число 1
;Складываем содержимое eax и 2. Сохраняем результат в eax.
add eax,2
;Преобразуем число(результат) в строку для вывода его на экран.
invoke wsprintf,result,formats,eax
;Выводим результат на экран.
invoke MessageBox,0,result,"Plus",MB_OK
;Алгоритм вычитания 4 из 10
;Перемещаем в eax число 10
mov eax,10
;Вычитаем из содержимого eax 4 (10-4). Сохраняем результат в eax.
sub eax, 4
;Преобразуем число(результат) в строку для вывода его на экран.
invoke wsprintf,result,formats,eax
;Выводим результат на экран.
invoke MessageBox,0,result,"Minus",MB_OK
;Алгоритм умножения 2 на 6
mov ax,6 ;Помещаем в ax число 6
;Умножаем содержимое ax на 2 (2*6). Результат будет находиться в eax.
shl ax,1
;Преобразуем число(результат) в строку для вывода его на экран.
invoke wsprintf,result,formats,eax
;Выводим результат на экран.
invoke MessageBox,0,result,"Umnojenie",MB_OK
invoke ExitProcess,0 ;Выход из программы

section '.idata' import data readable
library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
INCLUDE 'INCLUDE\api\kernel32.inc'

Задание №4
Согласно заданию №3 Составить свой пример программы на flat assembler
-например, изменить числа в «теле» программы.




Практическая работа №2
Работа с операциями сложения и вычитания над целыми числами.
Работа с операциями умножение и деления целых чисел.

Порядок выполнения работы
1. Загрузка системы
2. Создание файла с текстом программы задания
3. Исправление ошибок компиляции
4. Создание файла, содержащего исполняемый модуль программы
5. Ввод исходных данных
6. Отладка программы на контрольном примере
Задание 1. Создайте программу на FASM по образцу. Определите какая команда отвечает за сложение.
format PE GUI 4.0
include 'include\WIN32AX.INC'
.data
formats db "%d",0 ; Задание формата вывода в 10-ой форме
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
A dd 01h
B dd 02h
C dw 03h ; определение исходных данных
D dw 04h
E db 0FEh
F db 01h
.code
start:
;Алгоритм сложения двух 32 -разрядных слов
mov Eax,[A] ;Перемещаем в eax число A
add EaX,[B] ;Складываем содержимое eax и B.
invoke wsprintf,result,formats,eax ;Преобразуем число в строку
invoke MessageBox,0,result,"А+Б 32- разрядные",MB_OK ;Вывод
mov Eax,0
invoke wsprintf,result,formats,Eax ;Преобразуем число в строку
invoke MessageBox,0,result,"Промежут Eax ",MB_OK ;Вывод
;Алгоритм сложения двух 16 -разрядных слов
mov ax,word[C]
add aX,word[D]
invoke wsprintf,result,formats,Eax ;Преобразуем число в строку invoke MessageBox,0,result,"С + Д 16-разрядные",MB_OK
;Алгоритм сложения двух 8 -разрядных слов
mov aL,byte[E]
add al,byte[F]
invoke wsprintf,result,formats,Eax ;Преобразуем число в строку
invoke MessageBox,0,result,"E + F 8-разрядные",MB_OK ;Вывод
invoke ExitProcess,0 ;Выход из программы
.end start

Задание 2. Используя образец программы, выполнить вычитание 16,32 и 8разрядных слов, слов и байтов. Результаты выдать на экран. Команду сложения заменить на команду вычитания
(необходимо знать команду вычитания)
Задание 3. Вычислить выражение 6X2+10Y2+4Z2. Все величины в выражении однобайтовые. Результат выдать на экран.
Программа (образец)

format PE GUI 4.0
include 'include\WIN32AX.INC'
.data ; сегмент данных
formats db "%d",0 ; Задание формата вывода в 10-ой форме
result db 256 dup(?) ;В этой строке сохраняется результат ;после его преобразования

A db 6
B db 10
C db 4

X DB 2
Y DB 1
Z DB 3
.code ; сегмент кода
start: ; Точка старта программы
Xor EAX,E
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·;Выход из программы
.end start

Напишите ответ в тетради к этой задаче. Измените данные так, чтобы следующий ответ не совпал с предыдущим.

Задание 4. Вычислить выражение 4X2+5Y2+3М2. Все величины в выражении однобайтовые. Результат выдать на экран.
Задание 5. Вычислить выражение 7X2+2Y2/3Z2. Все величины в выражении однобайтовые. Результат выдать на экран.
Задание 6. Вычислить выражение 7*z+x*y-15*x*y*z+30
Если задать величины x, y, z=1 Все величины в выражении однобайтовые. Результат выдать на экран.

Программа №6.(образец)
Format PE GUI 4.0
include include\WIN32AX.INC’
.data
formath db «%0lx»,0 ; Задание формата вывода 16
formatd db «%d»,0 ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x db 1 ; 20h
y db 1 ; 40h
z db 1 ; 50h ; 7*z+x*y-15*x*y*z+30=23 , если x=y=z=1
c db 7
.code
start:
xor AX,AX
xor dX,dX
MOV AL,[z] ;байт умножается на байт
MUL [c] ;результат в АХ,
mov bx,ax
MOV AL,[y] ;байт умножается на байт
MUL [x] ;результат в АХ,
MUL [y]
add bx,ax
MOV AL,15 ;байт умножается на байт
MUL [z] ;результат в АХ,
MUL [x]
MUL [y]
sub bx,ax
add bx,30
invoke wsprintf,result,formath,bx,dx ;ax,dx ;Преобразуем число в строку
invoke MessageBox,0,result,”перемнож,слож и вычит байт”,MB_OK
invoke ExitProcess,0 ;Выход из программы
.end start

Задание 7.
Вычислить выражение 6*х+z*y-11*x*y*z+13
Если задать величины x, y, z=1


Практическая работа №3


Тема: Работа с командами условного и безусловного перехода
Работа с командами ввода/вывода данных. Выполнение прерываний в программе

Задание 1. Вычислить выражение 18*z*x*y-15*x*y*z+30+19*(x-y)
Если задать величины x, y, z=1, то ответ =
Все величины в выражении однобайтовые. Результат выдать на экран.
Программа № 1
format PE GUI 4.0
include 'include\WIN32AX.INC'

.data
formath db "%0lx",0 ; Задание формата вывода 16
formatd db "%0d",0 ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x db 2 ; 20h
y db 2 ; 40h
z db 2 ; 50h ; 18*z*x*y-15*x*y*z+30+19*(x-y)= , если ;x=y=z=1
c db 7
.code
start:
xor AX,AX
xor dX,dX
MOV AL,18
MUL [x]
MUL [y]
MUL [z]
mov bx,ax
MOV AL,15
MUL [x]
MUL [y]
MUL [z]
sub bx,ax
add bx,30
MOV CL,19
MOV al,[x]
sub al,[y]
MUL cl
add ax,bx
invoke wsprintf,result,formatd,ax,dx ;Преобразуем число в строку
invoke MessageBox,0,result,"перемнож,слож и вычит байт",MB_OK ;Вывод

invoke ExitProcess,0 ;Выход из программы
.end start

-1.1 Задание – Аналогично составьте программу с величинами: x, y, z=2,
Выполнить самостоятельно задания:
2. 2-30*z*x*y-16*x*y*z-41+4*(х-y)
3. 129- z*x*y+x/y+85
70-17*x-65*y+13*z
88*z-76*y+51*x

Задание 6. Вычислить выражение x*x*x-y*y*y-z*z*z*z+137
Если задать величины x, y, z=1.
Все величины в выражении однобайтовые. Результат выдать на экран.

;Программа №6
format PE GUI 4.0
include 'include\WIN32AX.INC'

.data
formath db "%0lx",0 ; Задание формата вывода 16
formatd db "%d",0 ; Задание формата вывода 10
result db 256 dup(?) ;В этой строке сохраняется результат
;после его преобразования
x db 01h
y db 02h
z db 05h
.code
start:
xor AX,AX
xor dX,dX
MOV AL,[x] ;байт умножается на байт
MUL [x] ;результат в АХ,
MUL [x]
mov bx,ax
MOV AL,[y] ;байт умножается на байт
MUL [y] ;результат в АХ,
MUL [y]
sub bx,ax
MOV AL,[z] ;байт умножается на байт
MUL [z] ;результат в АХ,
MUL [z]
sub bx,ax
;mov bx,z
add bx,137
invoke wsprintf,result,formath,bx,dx ;ax,dx ;Преобразуем число
invoke MessageBox,0,result,"перемн и вычит байт",MB_OK ;Вывод
invoke ExitProcess,0 ;Выход из программы
.end start

Задание 7 Вычислить выражение Z3-T3. В выражении используются однобайтовые величины.
Задание 8 Вычислить выражение Z3-T3+45 В выражении используются однобайтовые величины

Практическая работа №5
Тема: Интегрированная среда программирования языка СИ.
Работа с операциями ввода, вывода в СИ.

Инструкция к выполнению заданий:
-Запустите интегрированную среду языка Си
-Выберите в п.м. Файл-Новый
-Составьте согласно заданию листинг программы
-Откомпилируйте созданную программу (Ctrl+F9 и Alt+F5)
-Сохраните результат



Задание 1. Создать программу с выводом разноцветных строк на цветном фоне. Текст:
«Прощай, свободная стихия!
В последний раз передо мной
Ты катишь волны голубые
И блещешь гордою красой.»

ПОДСКАЗКА Цвет символов, выводимых функциями cprintf и cputs, устанавливает функция text color {Цвет).
Цвет фона устанавливает функция textbackground (Цвет).
Цвет можно задать при помощи целой или именованной константы.
Чтобы использовать функции clrscr, textcolor и textbackground, в текст программы нужно включить директиву #include

Задание 2. Написать программу вычисления площади параллелограмма.

Задание 3. Написать программу вычисления объема куба.

Задание 4. Написать программу вычисления стоимости покупки (В РУБЛЯХ), состоящей
Из нескольких дисков, нескольких оптических мышек и 1 ноутбука. Полученную сумму первести в ДОЛЛАРЫ, принимая 1$ за 34.87 руб.

Задание 5. Написать программу вычисления сопротивления электрической цепи, состоящей из двух параллельно соединенных сопротивлений. (r=rl*r2/(rl+r2))

Задание 6. Написать программу вычисления силы тока в электрической цепи.

Задание 7. Написать программу вычисления расстояния между населенными пунктами, изображенными на карте.

Задание 8. Написать программу вычисления стоимости поездки на автомобиле на дачу (туда и обратно). Исходными данными являются: расстояние до дачи (км); количество бензина, которое потребляет
автомобиль на 100 км пробега; цена одного литра бензина.

Задание 9. Написать программу, вычисляющую скорость, с которой бегун пробежал дистанцию.

Задание 10. Написать программу вычисления величины дохода по вкладу. Процентная ставка (% годовых) и время хранения (дней) задаются во время работы программы.

Задание 11. Написать программу, которая преобразует введенное с клавиатуры дробное число в денежный формат. Например, число 12.5 должно быть преобразовано к виду 12 руб. 50 коп.

ПРИМЕР ВЫВОДА данных:
Введите дробное число -> 23.6
23.6 руб. это 23 руб. 60 коп.





Практическая работа №6
Тема: Работа с арифметическими операциями на языке Си

1. Составьте программу нахождения объема и площади поверхности шара.



2. Составьте программу нахождения площади поверхности и объема цилиндра



3. Составьте программу нахождения объема полого цилиндра. r1 - радиус цилиндра, r2-радиус отверстия , h- высота цилиндра




4. Составьте программу нахождения объема конуса.



5. Написать программу вычисления стоимости некоторого количества (по весу) персиков. Ниже приведен рекомендуемый вид экрана во время выполнения программы.

Вычисление стоимости покупки.(вывод названия программы)
Введите исходные данные: (вывод строки запроса данных)
Цена одного килограмма яблок (руб.) -> 8.5 (ввод произвольно с клавиатуры)
Вес яблок (кг) -> 2.3(ввод произвольно с клавиатуры)
Стоимость покупки: 19.55 руб.(расчет стоимости покупки)

6. Написать программу пересчета величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах. Ниже приведен рекомендуемый вид экрана во время выполнения программы

Введите временной интервал (в минутах) -> 150
150 минут это 2 ч . 30 мин.

**Подсказка h = (int)min / 60;
m = min % 60;

7. Пример (решать не надо). Написать программу, которая преобразует введенное с клавиатуры
дробное число в денежный формат. Например, число 12.5 должно быть преобразовано к виду 12 руб. 50 коп.

Преобразование числа в денежный формат.
Введите дробное число -> 23.6
23.6 руб. это 23 руб. 60 коп.

#include
tinclude
void mainO
{
float f; // дробное число
int r; // целая часть числа (рубли)
int к; // дробная часть числа (копейки)
printf("ХпПреобразование числа в денежный формат\п"),
printf("Введите дробное число ~> " );
scanf("%f",&f);
r - (int)f;
к = f * 100 - r*100;
printf("%6.2f руб. - это %i руб. %i коп.\п", f, г, к);
}
8. Написать программу пересчета веса из фунтов в килограммы (1 фунт 405,9 грамма). НАПРИМЕР
Введите вес в фунтах и нажмите . -> 3.5
3.5 фунт(а/ов) это 1 кг 420 гр

















Практическая работа №7
Тема: Работа с условным оператором на языке Си.

*Задачи на повторение
1.Составить программу нахождения площади треугольника: s = Ѕ*a*h, где а длина основания; h высота треугольника.

2. Составить программу нахождения площади трапеции
где а и b длины оснований; h высота трапеции.

**Задачи по новой теме.
3. (81)Написать программу вычисления сопротивления электрической цепи, состоящей из двух сопротивлений. Сопротивления могут быть соединены последовательно или параллельно. Ниже приведен рекомендуемый вид экрана во время выполнения программы

ПРИМЕР
Вычисление сопротивления электрической цепи.
Введите исходные данные:
Величина первого сопротивления (Ом) -> 15
Величина второго сопротивления (Ом)-> 27.3
Тип соединения (1 последовательное, 2 параллельное) -> 2
Сопротивление цепи: 9.68 Ом

4. (83)Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 10% предоставляется, если сумма покупки больше 1000 руб. Ниже приведен рекомендуемый вид экрана во время выполнения программы
ПРИМЕР
Вычисление стоимости покупки с учетом скидки
Введите сумму покупки и нажмите
-> 1200
Вам предоставляется скидка 10%
Сумма покупки с учетом скидки: 1080.00 руб.

5.(84) Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется, если сумма покупки больше 500 руб, в 5% если сумма больше 1000 руб. Ниже приведен рекомендуемый вид экрана во время выполнения программы
ПРИМЕР
Вычисление стоимости покупки с учетом скидки.
Введите сумму покупки и нажмите
-> 640
Вам предоставляется скидка 3%
Сумма с учетом скидки: 620.80 руб.

6. (88)Напишите программу проверки правильности ответа на поставленный вопрос.
Программа должна вывести вопрос и три варианта ответа. Пользователь должен выбрать правильный ответ и ввести его номер. Ниже приведен рекомендуемый вид экрана во время выполнения
программы

Что такое ресурсы сети?
1. Данные, приложения, периферийные устройства
2. Шина, звезда, кольцо
3. Мост, концентратор, репитер
Введите номер правильного ответа и нажмите
-> 2
Вы ошиблись.
Правильный ответ: 1

7. (90)Написать программу, которая выводит пример на умножение двух однозначных чисел, запрашивает ответ пользователя, проверяет его и выводит сообщение "Правильно!" или "Вы ошиблись" и правильный результат. Ниже приведен рекомендуемый вид экрана во время выполнения программы
ПРИМЕР
Сколько будет 6x7?
Введите ответ и нажмите
-> 56
Вы ошиблись. 6x7=42

Практическая работа №8
Тема: Работа с оператором множественного выбора на Си
1. Пример. Напишите программу, которая запрашивает у пользователя номер дня недели, затем выводит название дня недели или сообщение об ошибке, если введены неверные данные.
#include
#include
void main()
{
int nd; // номер дня недели
puts("\n Введите номер дня недели (1..7");
printf("->");















Задание 1. Напишите программу, которая запрашивает у пользователя номер сезона , затем выводит название сезона или сообщение об ошибке, если введены неверные данные.
(например 1- зима, 2- весна, 3- осень, 4- лето)

Задание 2.Вводится число экзаменов С<=5. Напечатать фразу «Мы учимся в колледже уже С лет», согласовав слово лет с числом С. Предусмотреть ситуацию ввода С<0

Задание 3. (107). Написать программу, которая вычисляет сумму первых n целых положительных целых чисел. Количество суммируемых чисел должно вводиться во время работы программы. Ниже приведен рекомендуемый вид экрана
Вычисление суммы положительных чисел.
Введите количество суммируемых чисел -> 20
Сумма первых 20 положительных чисел равна 210

Подсказка** Здесь работает счетчик for
summ = 0;
for (i = 1; i <= n; i++)
summ = summ+i;

Задание 5. (123)  Составить таблицу умножения на 7.

Задание 6. Написать программу, которая вычисляет факториал введенного с клавиатуры числа. (Факториалом числа n называется произведение целых чисел от 1 до n.
Например
Введите число, факториал которого надо вычислить
-> 7
Факториал 7 равен 5040


Задание 7. Найти среднее арифметическое квадратов всех целых чисел от 1 до 100.



Практическая работа №9
Тема: Решение математических выражений на языке СИ.






















Практическая работа №10
Тема: Работа с оператором For на СИ
Пример 1. Найти сумму всех натуральных чисел от 1 до n.
#include
main()
{
int n,i;
printf("vvedi n \n");
scanf("%d",&n);
for(i=0; i {
printf("%d - %d\n", i, i+i+i);
}
}

Задание 1.1 Найти сумму всех натуральных чисел от 1 до n и прибавить к получившейся сумме (а)= 160.

Задание 2. Найти произведение всех натуральных чисел от 1 до n и отнять от получившегося произведения число 17.

Задание 3. Составить программу, чтобы она запрашивала ЧИСЛО (N) для вывода Символа (*)- в строчку!!!

Задание 4 Составить программу, чтобы она запрашивала ЧИСЛО (N) для вывода слова новый год! в столбик!!!

Задание 5. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел.
#include
#include
void main()
{
i nt x = 1; // число
int у; // квадрат числа
int i; // счетчик циклов
printf("Таблица квадратов\n");
printf ("-------- \n");
printf("Число \t Kвaдpaт\n");
printf ("-------- \n") ;
for (i = 1; i <= 10; i++)
{
у = x*x;
printf("%3i\t%4i\n", x, y);
X += 1;
}
printf (" \n-------") ;
}

Задание 6. Написать программу, которая выводит таблицу квадратов первых пяти целых положительных нечетных чисел. Справа приведен рекомендуемый вид экрана во время работы программы.






Пример 7. Написать программу, которая вычисляет сумму первых n членов ряда: 1, 3, 5, 7 ... Количество суммируемых членов ряда задается во время работы про граммы. Ниже приведен рекомендуемый вид экрана во время работы программы
Вычисление частичной суммы ряда: 1,3,5,7 ...
Введите количество суммируемых членов ряда -> 15
Сумма первых 15 членов ряда равна 330

#include
void main()
{
int e; // член ряда
int n; // кол-во суммируемых членов
int summ = 0 ; // частичная сумма ряда
int i; // счетчик циклов
printf("Вычисление частичной суммы ряда: " ) ;
printf("1,3,6,9, ...\n");
printf("Введите количество суммируемых членов -> " );
scanf("%i", &n);
е = 1;
for (i = 1; i <= n; i++)
{
summ += e;
e += 2;
}
printf("Сумма первых %i членов ряда равна %i", n, summ);

Задание 7.1Написать программу, которая вычисляет сумму первых n целых положительных четных целых чисел. Количество суммируемых чисел должно вводиться во время работы программы.
Ниже приведен рекомендуемый вид экрана во время работы программы

Вычисление суммы четных положительных чисел.
Введите количество суммируемых чисел и нажмите
-> 12
Сумма первых 12 положительных четных чисел равна 156

Задание 8 (111). Написать программу, которая выводит таблицу степеней двойки от нулевой до десятой. Ниже приведен рекомендуемый вид экрана во время работы программы.






















Практическая работа №11
Тема: Работа с одномерными массивами на языке СИ

1.Пример. Создание программы ввода и вывода массива.

#include
void main(void)
{
double a[15];
int n, I;
printf(“vvedite kol-vo n = “);
scanf(“%d”, &n);
for(i=0; i {
printf(“a[%d] = “, i); scanf(“%lf”, &a[i]);
} }

Задание 1.1. Измените программу так, чтобы она прибавляла к каждому элементу массива число 15.

2.Пример. Дан массив из 10 элементов. Найти сумму всех значений введенных элементов массива.
#include
void main(void)
{
double a[10]; int n,i,r;
printf("vvedite kol-vo el massiva n = ");
scanf("%d", &n);
for(i=0; i {
printf("a[%d] = ", i); scanf("%lf", &a[i]);
}
{
r=0;
for(i=0;i r=a[i]+r;
}
printf("otvet =%d\n", r);
}


Задание 2.1 Дан массив из 5 элементов. Найти произведение всех значений введенных элементов массива и прибавить к произведению число 20.

Задание 3. Дан массив из 10 элементов a[10]. Найти максимальный из введенного кол-ва элементов массива

Задание 4. Дан массив из 30 элементов. Найти среднее арифметическое введенных значений массива.

Задание 5.Дан одномерный массив из 5 элементов, нужно отобразить на экране значение каждого элемента. (Допишите программу)

#include
void main(void)
{
int values[5] = {80, 70, 90, 85, 80);
int i;
.
Задание 6. Задан одномерный массив a[10], заполненный произвольным образом. Подсчитать количество элементов массива, меньших заданного числа С.




Отв на з №5
#include

void main(void)
{
int values[5] = {80, 70, 90, 85, 80);
int i;

for (i = 0; i < 5; i++)
printf("values[%d] %d\n", i, values[i]);
}




Практическая работа №12
Тема: Работа с массивами строк на языке СИ

1. Пример . Ввод и вывод строки.
#include
void main (void)
{
int len;
char str[81];
printf("Vvedite ctroku: "); scanf("%s", str);
for(len=0; str[len]; len++);
printf("dlina stroki = %d\n", len);
}
Задание 1.1 Выведите любую фразу : «Знать меру следует во всем, везде. Знать меру надо в дружбе и вражде.» Саади.

2..Пример. Копирование строки 1 и 2 и присоединение строк.
#include
#include
int main ()
{
char s1[20], s2[20];
strcpy(s1,"Hello");
strcpy(s2,"C++");
strcat(s1,s2);
puts(s1);
return 0;
}
Задание 2.1 Создайте программу содержащую массивы 4-ёх строк.1 строка Мы, 2- любим друзей 3- за их, 4- недостатки!

3. Пример. Посчитать количество символов в строке.
#include
#include
main()
{
char str[80];
printf("Vvedite ctroku: ");
gets(str);
printf("%s\n", str);
puts(str);
printf("ctroka \n%s \n imeet dliny %d cimv-v \n", str, strlen(str));
return 0;
}

Задание 3.1 Составить программу вывода двух строк и подсчитать кол-во символов каждой строки.


Практическая работа №13
Тема: Работа с двумерными массивами на языке СИ

Пример вывода двумерного массива, состоящего из 4-х столбцов и 3-х строк.
#include
int main(void)
{
int t, i, num[3][4];

for(t=0; t<3; ++t)
for(i=0; i<4; ++i)
num[t][i] = (t*4)+i+1;
for(t=0; t<3; ++t) {
for(i=0; i<4; ++i)
printf("%3d ", num[t][i]);
printf("\n");
}
return 0;
}

Задание 1.1 Дан двумерный массив, состоящий из 3 столбцов и 2 строк. Найти минимальный элемент массива и отнять от него 2.


Задание 2 Дан двумерный массив, состоящий из 4 столбцов и 5 строк. Найти сумму всех элементов массива.

Задание 3 Дан двумерный массив, состоящий из 6 столбцов и 5 строк. Найти среднее арифметическое элементов массива и умножить его на 10.

Задание 4. Дан массив из n x m элементов. (n=3; m=4) Найти сумму элементов каждой строки.


Задача 5. Дан массив из n x m элементов. (n=2; m=2) Найти сумму элементов каждого столбца.


Практическая работа №14
Тема: Работа с указателями и с указателями в двумерных массивах

Пример 1. Программа, печатающая строку символов в обратном порядке.

#include
main()
{
char *uk1,*uk2;
uk1=uk2="informatika";
while(*uk2!='\0')
putchar(*uk2++);
putchar('\n');
while(--uk2 >= uk1)
putchar(*uk2);
putchar('\n');
}

**Пояснения: В самом начале указателям uk1 и uk2 присваивается начальный адрес строки «informatika". Затем строка посимвольно печатается и одновременно указатель uk2 смещается вдоль строки. В конце вывода uk2 указывает на последний символ исходной строки

Задание 1.1 Составьте программу так, чтобы она обеспечивала ввод нескольких слов в строку в прямом и обратном порядке и опять в прямом. (слово «слово оборот»)


Пример 2. Вывести значения одномерного массива обычным способом и с использованием указателей.

#include
int a[6]={10,20,30,40,50,60};
main ()
{int i, *p;
for (i=0; i<6; i++)
printf("%d",a[i]);
for (p=&a[0];p<=&a[5];p++)
printf("%d",*p);
for (p=&a[0],i=0; i<6; i++)
printf("%d",p[i]); }

Задание 2.1 Вывести значения одномерного массива a[10]={113,240,135,306,411,54,33,59,76,69} в столбик используя указатели .

Задание 2.2 Вывести значения одномерного массива a[4]={2,5 6,8 7,7 5,5 } в строку используя указатели .

Пример 3. Найти сумму элементов массива, состоящего из шести элементов, с использованием указателя.
#include
int a[]={1,2,3,4,5,6};
main()
{int i,*p,s;
p=a;
for (s=0,i=0; i<6; i++)
s+=*(p+i);
printf("%d\n",s);
}
Задание 3.1.Найти сумму элементов массива, состоящего из 7 элементов int a[]={15, 8, 7, 5, 23, 4, 6, 4}, с использованием указателя и прибавить 100.

Задание 4. Найти произведение массива, состоящего из 3 элементов int a[]={56,90,80}, с использованием указателя.

Задание 5. Составьте программу на нахождение среднеарифметического 5-ех целых переменных с применением указателей.



Задание 6. Составьте программу инициализации двумерного массива a[4][4], выборки элементов с a[2][1] до a[4][4] и их распечатки. Используйте доступ к элементам по указателю.

(примерная программа)
#include
int a[3][3]={{10,20,30},
{40,50,60},
{70,80,90}};
int *p=a[0];
main ()
{int i;
for (i=0;i<9;i+=4)
printf("%d\n",*(p+i));
}

Задание 7. Составьте программу инициализации двумерного массива a[6][6], выборки каждого 6-го элемента двумерного массива. Используйте доступ к элементам по указателю.
Задание 8. Составьте программу инициализации двумерного массива a[2][8], вывод на экран 1 и последнего элементов двумерного массива . Используйте доступ к элементам по указателю.









Практическая работа №15
Тема: Работа с глобальными переменными и функциями на СИ
1. Пример программы, в которой сравниваются две строки, введенные пользователем. Обратите внимание на объявление функции check() и указатель p внутри main(). Указатель p, как вы увидите, является указателем на функцию.
#include
#include
void check(char *a, char *b,
int (*cmp)(const char *, const char *));
int main(void)
{
char s1[40], s2[40];
int (*p)(const char *, const char *); /* указатель на функцию */
p = strcmp; /* присваивает адрес функции strcmp указателю p */
printf("Введите две строки.\n");
gets(s1);
gets(s2);
check(s1, s2, p); /* Передает адрес функции strcmp посредством указателя p */
return 0;
}
void check(char *a, char *b, int (*cmp)(const char *, const char *))
{
printf("Проверка на совпадение.\n");
if(!(*cmp)(a, b)) printf("Равны");
else printf("Не равны");
}

Задание 1.1 Составьте программу, в которой сравниваются 4 строки.

Пример2. Пример программы передающей функции массив и количество элементов, содержащихся
#include
void show_array(int values[], int number_of_elements)
{
int i;
for (i = 0; i < number_of_elements; i++)
printf("%d\n", values[i]);
}
void main(void)
{
int scores[3] = {12,16,23};
show_array(scores, 3);
}


Задание 2.2 Составьте по аналогу программу, в которой функция show_array вызывается 5 раз
с 5-ю различными массивами .

Пример 3. 1Написать функцию "Факториал" и программу, использующую эту функцию для вывода таблицы факториалов.
#include "stdio.h"
#include "conio.h"
unsigned int factor(int x)
{
unsigned int f = 1;
for (int i = 2; i <= x; i++)
f *= i;
return(f);
}
void main()
{
unsigned int f;
puts("\nТаблица факториалов");
for (int n = 1; n <= 8; n++)
{
f = factor(n);
printf("%2i %u\n", n, f);
}
Задание 3.1 1Написать функцию "Квадрат чисел от1 до 9" и программу, использующую эту функцию для вывода таблицы квадратов чисел.

Задание 4. Написать функцию, которая вычисляет значение аb. Числа а и b могут либо целыми, либо дробными числами.

Задание 5. Написать функцию Procent, которая возвращает процент от полученного в качестве аргумента числа.

Пример 6. Рассмотрим функцию Sum(), вычисляющую значение суммы элементов массива:

#include
double Sum(double A[], int nA)
{
double s = 0;
while(nA) s += A[--nA];
return s;
}
void main (void)
{
double B[] = { 1, 2, 3, 4, 5 };
int nB = sizeof(B)/sizeof(B[0]);
printf("Сумма = %lf\n", Sum(B,nB));
printf("nB = %d\n", nB);
}

Задание 7. По примеру вышеуказанной программы найти среднее арифметическое массива из 4-ех элементов. {16, 5, 7, 1}.

Задание 8 Напишите программу, вычисляющую произведение элементов массива {-4, 1,3,9,9,2}
Функцию (Sum) из предыдущей задачи замените на (pro) Обязательно в конце программы написать ответ чему равно произведение элементов массива

Практическая работа № 17
Тема: Работа со структурами на СИ


Пример 1.Пример программы: /* Демонстрация записи */

#include < stdio.h >
struct computer { int mem; int sp; char model [20]; };
/* Объявление записи типа computer, состоящей из трех элементов: mem, sp, model */
struct computer pibm = {512, 1, “ПЭВМ ЕС 1840.05”};
/* Объявление и инициализация переменной pibm типа computer */
main ( )
{ printf (“ персональная ЭВМ % s\n\n “, pibm.model);
printf ( “объем оперативной памяти - % d К байт \n”, pibm.mem);
printf (“производительность - % d млн. операций в секунду \n”, pibm.sp);
/* вывод на экран значений элементов структуры */
}
В данной программе объявляется запись computer, которая состоит из трех элементов: mem (память ЭВМ), sp (быстродействие), model [20] (модель ПЭВМ). Переменная pibm имеет тип computer и является глобальной. Строки pibm.model, pibm.mem, pibm. sp в операторе printf вызывают обращение к соответствующим элементам записи pibm типа computer, которым ранее были присвоены определенные значения.

Результат работы программы имеет вид:

персональная ЭВМ ПЭВМ ЕС 1840.05
объем оперативной памяти – 512 К байт
производительность – 1 млн. операций в секунду

Задание 1.1 Аналогично примеру опишите используя структуру :

1.1.1 Запись БЛЮДО, которая состоит из 4-ух элементов (название блюда, 1 ингредиент, 2 ингредиент,
3 ингредиент.)
** У каждого свой пример!!!!!!!!!!!!!!!


1.1.2) запись Книга, которая состоит из 5-ух элементов (Женр, Название книги, Автор, издательство, цена книги, )
** У каждого свой пример!!!!!!!!!!!!!!!

Пример 2. Составьте программу, используя структуру.
Опишите запись АНКЕТА и поместите в нее следующую информацию: Ф.И.О.(фамилия, имя, отчество), адрес (улица, номер дома, номер квартиры), пол, возраст.
# include
struct date { int day;
int month;
int year; };
struct person { char fam [20];
char im [20];
char ot [20];
struct date f1;};
main ( )
{ struct person ind1;
printf ( "f,i,o,den, mecac, god rogdenia grazd-na ind1 \n" );
scanf ("%s %s %s %d %d %d", &ind1.fam, &ind1.im, &ind1.ot,
& ind1.f1.day, &ind1.f1.month, &ind1.f1.year );
printf (" F,I,O: %s %s %s\n", ind1.fam, ind1.im, ind1.ot);
printf ("God r - %d\n", ind1.f1.year);
printf ("mecac - % d\n", ind1.f1.month);
printf ("den - % d\n", ind1.f1.day);
}

Задание 2.Опишите запись АВИА БИЛЕТ и поместите в нее следующую информацию: Ф.И.О. (фамилия, имя, отчество пассажира), возраст пассажира (год рождения), багаж (количество вещей, вес в кг).















Учебно-методическое и информационное обеспечение учебной практики
а)Основная литература:
Голицина О. Л., Попов И. И. Основы алгоритмизации и программирования: Учебное пособие. - М: Форум, 2008.
Подбельский В.В., Фомин С.С. Программирование на языке СИ. Учебное пособие. М,: ДИАЛОГ, 2005.
Юров В. Ассемблер –СПб.: Питер, 2010. – 637 с.,
В. Н. Пильщиков Программирование на языке ассемблера IBM PC.: «Диалог МИФИ», 2008. – 288 с.
5. Н.Культин «С/С++ в задачах и примерах


б)Дополнительная литература:
1.Семакин И. Г., Шестаков А. П. Основы программирования. учебник. - М.: Издательский
центр «Академия», 2006.
2. Пирогов В. Ассемблер на примерах. 2005.
3.Семакин И. Г., Шестаков А. П. Основы программирования. учебник. - М.: Издательский
центр «Академия», 2006.

в) программное обеспечение и Интернет-ресурсы

-Операционная система Windows XP, интегрированная среда ассемблера Fasm, интегрированная среда языка С

1) [ Cкачайте файл, чтобы посмотреть ссылку ]
2) [ Cкачайте файл, чтобы посмотреть ссылку ]
3) [ Cкачайте файл, чтобы посмотреть ссылку ]


Приложенные файлы


Добавить комментарий