Задание 1 Массив одномерный. Отчет по выполнению заданий 1 и 2 по статическому и динамическому массивам. По заданию 3 в отчет включить код, комментируя функции. 2
Скачать 116.17 Kb.
|
Пример разработки приложения и оформления отчета по заданию 2Условие задачи варианта Скопировать задание Скопировать условие варианта Дан массив из n элементов целого типа long. Массив исходный динамический. Сформировать массив из чисел Армстронга (153=13+53+33). Массив динамический. Определение функций Создание массива из n элементов целого типа для исходного массива. Предусловие Нет Постусловие вводит размер массива с клавиатуры. Создает динамический массив из n элементов целого типа. Возвращает указатель на массив из n и n, либо NULL, если память под массив не выделена. long *create_array(int &n); Добавление нового элемента в массив Предусловие. Массив должен существовать, т.е. L отлично от NULL. Постусловие. Увеличивает размер массива на один элемент, добавляя новую ячейку в конец массива. Используется функция realloc из malloc.h void insert_elems(long *&L,int &n,long x); Удаление последней ячейки из массива Предусловие. Массив должен существовать. Постусловие. Из массива удаляется последняя ячейка. Размер массива уменьшается. void delete_elems(long *&L,int &n); Ввод значений Предусловие. n – число заполняемых элементов,0 ≤n≤Max, где MAX – максимальное число элементов, L – массив с переменной верхней границей. Постусловие. Заполненный массив из n элементов void input_ar(long L[], int n); Вывод значений массива void output_ar(long L[], int n); Предусловие. n>0 Постусловие. Вывод значений массива //Операции для решения поставленной задачи Определение количества цифр в числе Предуслвие. n≥10 Постусловие. Результат целое, сумма цифр int count(long n); Возведение целого числа в степень Предуслвие. а>0 – цифра числа, p>0 – количество цифр в числе Постусловие. Результат целое, возведение а в сtтепень p long double pow_1(unsigned short a, unsigned short p); Определение числа Армстронга Предуслвие. x>0 целое число, Постусловие. Результат true если х число Армстронга и false иначе bool Armstrong(long x); Формирование массива чисел Армстронга Предусловие. A исходный массив размера n>0. Постусловие. Результат: создает и заполняет массив B если в массиве А есть числа Армстронга; изменяет nB если числа Армстронга есть в А. Если в массиве А нет чисел Армстронга, то nB=0 и результат возвращаемый функцией NULL long* newArrayB(long *A, int n, int &nB); Реализация функций приложения #include #include"malloc.h" #include"string.h" long *create_array(int &n); void output_ar(long L[], int n); void input_ar(long L[],int n); void insert_elems(long *&L,int &n,long x); void delete_elems(long *&L,int &n); void insert(long *&L,int &n,long x); long* newArrayB(long *A, int n, int &nB); //Определение количества цифр в числе int count(long x); //Возведение целого числа в степень p long double pow_1(unsigned short a, unsigned short p); //Определение числа Армстронга bool Armstrong(long x); int main(int argc, char* argv[]) {int n; long *A=create_array(n); input_ar(A, n); int x=10; insert_elems( A, n,x); //добавили еще одно значение в массив А output_ar(A, n); delete_elems(A,n); //удалили последний элемент output_ar(A, n); cout<<(sizeof(a)/sizeof(long))< int nB=0; long *B=newArrayB(A, n, nB); if (nB>0){ cout<<”Найдены числа Армстронга в массиве А\n”; output_ar(B, nB); } else cout<<”Не найдены числа Армстронга в массиве А\n”; return 0; } long *create_array(int &n) { cout<<"Введите количество элементов n="; cin>>n; long *ptr=new long[n]; return ptr; } void input_ar(long L[],int n) { cout<<"введите "< for(int i=0;i cin>>L[i]; } void output_ar(long L[], int n) { cout<<"Массив "<< endl; for (int i=0;i< n; i++) cout<<"a["< } void insert(long *&L,int &n,long x) //вставка нового значения в массив { memcpy(L,L,n+1); //увеличение размера массива –функция из string.h L[n]=x;n++; } void insert_elems(long *&L,int &n,long x) //вставка нового значения в массив { L=(long*) realloc((long*)L,(n+1)*sizeof(long)); //увеличение размера массива –функция из malloc.h //увеличение памяти по указателю L L[n]=x; n++; } void delete_elems(long *&L,int &n) //удаление элемента из массива { L=(long*)realloc((long*)L,(n-1)*sizeof(long)); // уменьшение размера памяти по указателю L n--; } long* newArrayB(long *A, int n, int &nB){ long *B=new long[0]; for(int i=0;i if (Armstrong(A[i]==true) if (nB==0) long *B=new long[1]; else B=(long*)realloc((long*)B,sizeof(long)*(nB+1)); B[nB]=A[i]; nB++; } return (nB>0?B:NULL); } |