Читайте также: |
|
Требование к выполнению задания
5.1. Использовать стандартные средства управление памятью.
5.2. В коде программе необходимо применять тип данных: указатели.
5.3. Обращение к элементам массива выполнять через указатель.
5.4. Данные должны:
· Вводится с клавиатуры,
· Автоматически генерироваться случайным образом.
5.5. В программе должно быть предусмотрено (по выбору пользователя:
· Продолжение работы программы с новыми данными;
· Завершение работы программы.
6. Порядок выполнения работ
1) Анализ задания;
2) Разработать тесты;
3) Разработать алгоритм программы;
4) Разработать программу на исходном языке;
5) Отладить программу;
6) Проверить работу программы по тестам;
7) Оформить отчет;
8) Защитить работу.
7. Содержание отчета:
1) Тема работы;
2) Цель работы;
3) Задание (общее);
4) Требования к заданию;
5) Индивидуальное задание;
6) Тесты для проверки работы программы (не менее 5);
7) Блок-схема программы;
8) Текст программы;
9) Фрагменты работы программы (копия экрана монитора, подтверждающая работу программы).
Теоретическая часть
Обобщенный алгоритм работы с динамическим массивом:
1. Выделение памяти
2. Обработка в соответствии с задачей,
3. Освобождение памяти
Средства поддержки (языков программирования и стандартных подпрограмм), простейшие действия над указателями
Наименование Действия | TurboPascal | C | C++ |
Объявление типа | Type pdata=^data; data = record day: integer; mn: integer; year: integer; end; | struct data { int day; int mn; int y; }; | struct data { int day; int mn; int y; }; |
Описание переменных | Var Pp: pointer; Mas, Pi: integer; Mt, Pr: real; Pdt: pdata; Dt: array[1..100] of data; | void *pp; int *pin; float *pf; char *str; struct data dt[5], *pdt; | void *pp; int *pin; float *pf struct data *pdt; |
Взять адрес | K: integer; …. Pi:=@K; | int k; ….. pi=&k | int k; ….. pi=&k |
Определить содержимое | k:=^pi; k:=pdt^.day; | k=*pi; k=pi->day | k=*pi; k=pi->day |
Обращение по индексу: · Одномерный массив · матрица | mas:=ptr(seg(p^),ofs(p^)+ i*sizeof(integer)) mt:=ptr(seg(p^),ofs(p^)+ (n*i+j)*sizeof(real)) | *(ms+i)=9 (ms+n* i+j)=1 | *(ms+i)=7 (ms+n* i+j=2) |
Определение размера в байтах | SizeOf(integer) SizeOf(data) | sizeof(int) sizeof(data) | sizeof(int) sizeof(data) |
Выделение памяти для структуры | GetMem(Pp: pointer, size:Word); | void *malloc(size); | Pin=new int[n]; pdt=new data; |
Освобождение памяти | FreeMem(Pp: pointer, size:Word); | free(void *pp); | delete(pin) |
9. Примеры
9.1. Задание 1.
/**************************************************************** Пример программы с использованием динамической памяти ** ** на языке программирования TurboPascal *****************************************************************uses crt;
var
mas:^integer;
m,n,i:integer;
p:pointer;
begin
write('kol:');
readln(n);
Getmem(p,sizeof(integer)*n);
m:=0;
for i:=0 to (n-1) do
begin
m:=m+11;
mas:=ptr(seg(p^),ofs(p^)+i*sizeof(integer));
mas^:=m;
end;
for i:=0 to (n-1) do
begin
mas:=ptr(seg(p^),ofs(p^)+i*sizeof(integer));
m:=mas^;
writeln(mas^,'=',m);
end;
freemem(p,sizeof(integer)*n);
end.
9.2. Задание 2.
/**************************************************************** Пример программы с использованием динамической памяти ** ** на языке программирования C *****************************************************************#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
clrscr();
int *ms,n,i,y,v,j=0;
scanf("%d",&n);
ms=(int *)malloc(n*sizeof(int));
for(i=0;i<n; i++) scanf("%d",&*(ms+i));
for(i=0;i<n; i++){
printf(" %d ",*(ms+i));
printf("\n");
}
for(i=0;i<n;i++)
{
if(*(ms+i)==0){
v=i;
j=j+1;
if(j==1)y=i;
}
}
printf("\n pervei:%d",y+1); getch();
printf("\n posledniy:%d",v+1); getch();
free(ms);
return 0;
9.3. Задание 3.
/**************************************************************** Пример программы с использованием динамической памяти ** ** на языке программирования C ***************************************************************** #include <stdio.h> #include <stdlib.h> #include <alloc.h> int *p; int main(void) { int n,m; int i,j,l; printf("\nвведите размер матрицы NxM\n"); scanf("%d %d",&n,&m); p = (int *)malloc(n*m*sizeof(int)); if (p==NULL) { printf("нет достаточной памяти"); exit(1); } for (i=0; i<n; i++) { for (j=0; j<m; j++) { *(p+i*m+j) = i+1; printf("%d ",i+1); } printf("\n"); } l=m; if (n < m) l=n; printf("диагональные элементы матрицы:\n"); for (i=0; i<l; i++) printf("%4d ",*(p+i*m+i)); free(p); return(0); }10. Типовые ошибки при выполнении практической работы:
1. Не освобождается память.
2. Неправильное обращение по индексу.
3. Путаница с командами «взять адрес» и взять содержимое.
Контрольные вопросы
1) Убедите в том, что задание выполнено с использованием динамических массивов.
2) Подтвердите что задание выполнено в соответствии с требованиями.
3) Тип данных: указатели. Особенности типа.
4) Действия выполняемые над указателями.
5) Функции управление памяти и их параметры.
6) Функции управление памяти в разных языках программирования
7) Классификация несвязанных динамических структур.
8) Отличительные особенности несвязанных структур.
9) Сравните статические и динамические массивы.
10) Средства поддержки динамического распределения памяти в несвязанных структурах.
12. Литература
1. Г.С.Иванова «Основы программирования» (издание второе) издательство «МГТУ имени Н.Э.Баумана» 2002
2. Минакова Н.И. И др. “Методы программирования” Москва Изд-во “Вузовская книга”, 1999, Стр 280
Дата добавления: 2015-10-29; просмотров: 77 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ДИПЛОМНЫЙ ПРОЕКТ | | | OSCAR WILDE QUOTES |