Help!

  • Автор темы Orion4ik
  • Дата начала
O

Orion4ik

Гость
#1
Мне надо сдать лабу в понедельник а я чуть чуть не понимаю C++... Вообщем помогите пожалуйста чем сможете!
Вот задания:

1) Оформить в виде подпрограммы (функции) код двоичного возведения в степень. Написать программу, вызывающую эту функцию.
2) Набрать и отладить код примера использования функций qsort и bsearch для сортировки целочисленного массива и дальнейшего поиска элементов в этом отсортированном массиве из файла СФС. Оформить его в виде подпрограммы (функции). Написать программу, вызывающую эту функцию.
3) Оформить набранные ранее функции из файла ОМ в виде продпрограмм и написать их вызывающие программы.
 

DarkKnight

Well-Known Member
01.08.2010
653
0
33
Владивосток
#2
1) Оформить в виде подпрограммы (функции) код двоичного возведения в степень. Написать программу, вызывающую эту функцию.

C++:
#include <iostream>

//Функция бинарного возведения в степень n^m, по принципу представление степени n^m 
int power(int n, int m) {
int res = 1; //У нас произведение поэтому начинаем с 1 (или n^0 = 1)
while (m) { //Пока возможен битовый сдвиг m
if (m & 1) {res *= n;} // используя коньюнцию определим нечетность m, если нечетная домножим на основание n
n *= n; //Присвоим значению основания его квадрат
m >>= 1; //Осуществляем бинарный сдвиг m на 1 бит
}
return res; //Вернем результат
}

void main(void)
{
int x, y; //x-основание, y - степень
std::cout<<"Input X: ";
std::cin>>x;

std::cout<<std::endl<<"Input Y: ";
std::cin>>y;

std::cout<<std::endl<<"Result: "<<power(x,y);
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
33
Владивосток
#3
А это твои пункты 2-3, если честно не совсем понимаю
Набрать и отладить код примера использования функций qsort и bsearch для сортировки целочисленного массива и дальнейшего поиска элементов в этом отсортированном массиве из файла СФС. Оформить его в виде подпрограммы (функции). Написать программу, вызывающую эту функцию.
Они как бы сами по себе функции, на кой черт их вообще инкапсулировать в другие, тут же про никакой интерфейс меню или прочее не сказанно.

3) Оформить набранные ранее функции из файла ОМ в виде продпрограмм и написать их вызывающие программы.
И еще раз :)) Вообще какая то охинея :)
тут как то что то такое что ли выйти должно?
void Sort1 (int *Arr, int SizeArr)
{
qsort(......);
}
void Sort2 (int *Arr, int SizeArr)
{
Sort1 (Arr,SizeArr);
}
:))))))))
Там с поиском еще ладно))) Там можно параметром сделать значение, но с этим просто не понимаю :)

C++:
#include <iostream>
using namespace std;

//Функция для qsort(Быстрой сортировки массива), из параметров указатели без типа на 2 рядом стоящих элемента
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b ); // Если a>b - вернуть >0, если a<b <0, исходя из этого функция qsort делает перестановку
// по методу пузырька 
// а если a = b, вернет 0, имеено из этого я и не определяю 2 функции для алгоритмов qsort и bsearch - сгодить толька эта функция
}

void PrintArr(int *Arr, int SizeArr) // Функция вывода массива, из параметров, Arr - указатель на массив (точнее на его первый элемент), и размер самого массива
//в Элементах (количество элементов)
{
for (int i = 0; i<SizeArr;i++) //Обходим весь массив и выводим на экран его элементы
{
cout<< Arr[i]<<'\t';
}
}

void main(void)
{
int Arr[] = {4,5,6,32,-12,5}; //Наш искомый массив... Впринципи его можно определять как угодно, хоть динамически хоть статически

int SizeArray = sizeof(Arr)/sizeof(int); //Запишим в переменную размер массива принцип определения массива в дин. массиве очень прост
//Размер массива в байтах делим на размер одного элемента в байтах (в нашем случае размер массива
//24 байта, а размер элемента int =2 байта

cout<<"Befor qsort :"<<endl;
PrintArr (Arr,SizeArray); //Выведим массив до сортировки

qsort(Arr,SizeArray,sizeof(int),compare); //Отсортируем его функцией qsort 

cout<<endl<<"After qsort :"<<endl;
PrintArr (Arr,SizeArray); //Выведим массив после сортировки

int key; //Переменная для значения элемента который мы будем искать
cout<<endl<<"Input value element in Search : ";
cin>>key; //Введем значение для поиска

if ((int*) bsearch (&key, Arr, SizeArray, sizeof (int),compare)) //Функция вернет указатель на элемент чье значение соответсвует введенному
{																//Или вернет NULL, если такого значения в массиве нет
cout<<"Elements "<<key<<" found in Array";
}
else cout<<"Elements "<<key<<" NOT found in Array";

}
 
O

Orion4ik

Гость
#4
За первое очень благодарен насчёт второго и 3 узнаю...

Добавлено: ах да вот + =)

Добавлено: =( неставится
 
O

Orion4ik

Гость
#5
вот файл СФС:
Вызов стандартных функций сортировки и поиска.
На практике при работе с данными часто встречаются задачи сортировки массива и поиска элементов в отсортированном массиве. Причем массивы могут иметь разные типы. Чтобы облегчить решение таких задач, в стандартной библиотеке языка программирования Си есть специальные функции qsort и bsearch, которые предназначены для решения этих задач.
Функция qsort выполняют сортировку массива, элементы которого имеют произвольный тип. Эта функция реализует «быстрый алгоритм» сортировки массивов и имеет следующий прототип:
void qsort(void *base, size_t n, size_t size, int (*cmp) (const void *e1, const void *e2));
который описан в заголовочном файле stdlib.h. Кратко опишем назначение параметров этой функции:
base адрес массива,
n количество элементов в массиве,
size длина элемента массива,
cmp указатель на функцию сравнения, которая возвращает:
- отрицательное число, если элемент e1 меньше элемента e2;
- 0, если элемент e1 равен элементу e2;
- положительное число, если элемент e1 больше элемента e2.
Функция bsearch выполняет бинарный поиск элемента в отсортированном массиве. Эта функция имеет следующий прототип:
void* bsearch(const void *key, const void *base,
size_t n, size_t size, int (*cmp)(const void *ck, const void *ce);
который также описан в заголовочном файле stdlib.h. Первый параметр key этой функции является указателем на элемент, который нужно найти. Остальные параметры повторяют параметры функции qsort. В случае успешного завершения поиска функция bsearch возвращает адрес найденного элемента, а в случае неудачи NULL.
В следующей программе показан пример использования функций qsort и bsearch для сортировки целочисленного массива и дальнейшего поиска элементов в этом отсортированном массиве.
#include <stdio.h>
#include <stdlib.h>

/* функция для сравнения элементов массива */
int comp_int(const int* e1, const int* e2)
{
return (*e1 < *e2) ? -1 : ((*e1 == *e2) ? 0 : 1);
}

/* программа сортировки элементов массива и поиска целого числа в отсортированном массиве */
int main()
{
int n; /* размер массива *.
int* a; /* массив */
int i; /* индекс */
int k; /* число для поиска */
int* s; /* адрес найденного числа */

printf("Input an array size: ");
scanf("%d", &n);
a = (int*)malloc(n*sizeof(int));

/* вводим массив */
printf("Input elements: ");
for (i = 0; i < n; ++i)
scanf("%d", &a);

/* сортируем массив */
qsort(a, n, sizeof(int),
(int (*)(const void*, const void*))comp_int);

/* выводим отсортированный массив */
printf("The sorted array: ");
for (i = 0; i < n; ++i)
printf("%d ", a);
printf("\n");

/* вводим число для поиска */
printf("Input a number to search.\n>");
scanf("%d", &k);

/* ищем это число в отсортированном массиве */
if(!(s = (int*) bsearch(&k, a, n, sizeof(int),
(int (*)(const void*, const void*))comp_int)))
printf("There is no such an integer.\n");
else
printf("The integer index = %d.\n", s-a);
free(a);

return 0;
}
В функции сортировки использовать любой алгоритм сортировки.