Форум программистов, компьютерный форум CyberForum.ru

Обращение содержимого массива - C++

Восстановить пароль Регистрация
 
Selle
 Аватар для Selle
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 15
17.05.2011, 19:56     Обращение содержимого массива #1
ЗАДАЧА:Реализуйте и протестируйте процедуру bool reverse ( float * array, int N), которая осуществляет обращение содержимого массива, т. е первый становится последним элементом, второй предпоследним и т.д. Время выполнения должно быть О(N), выделяемая дополнительная память O(1).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//reverse.h  и swap.hЗаголовочный файл
bool reverse ( float * array, int N);
bool swap ( float * a, float * b);
------------------------------------------------------
//reverse.cpp Описание процедуры в её корректности я не уверена)))
 
#include "reverse.h"
#include "swap.h"
bool reverse (float * array, int N)
{
    float first = * array;
    float last = * (array + N - 1);
    while (first < last)
    {
        mswap(&first, &last);
        first++; last--;
        return true;
    }
 
}
--------------------------------------------------------------------
//mswap.cpp Описание процедуры точно работает
 
#include "swap.h"
bool mswap (float * a, float * b)
{
    int  aold = *a;
    *a = *b;
    *b = aold;
   
    return true;
-------------------------------------------------------
//testreverse.cpp Проверка программы
 
#include <iostream>
#include <vector>
#include "reverse.h"
//init
using namespace std;
 
int main()
{
    cout << "Input number of elenemets in array: ";
    int N;
    cin >> N; cout << endl;
 
/*  float array[N];
 
    for (int i = 1; i <=N; i++)
    {   float s;
        cout << "Input " << i << " element: " ;
        cin >> s;
        array[i] = s;
    }*/
 
    vector <float> array;
    for(int i = 1; i <= N; i++)
    {
        cout << "Input element: ";
        float r;
        cin >> r;
        array.push_back(r);
    }
 
    cout << endl;
 
    cout << "Before reverse: ";
    for (int i = 0; i < N; i++)
        cout << " " << array[i] << " ";
 
    cout << endl; cout << endl;
 
    cout << "After reverse: ";
 
    reverse(&array, N); -> Здесь проблемусечка!
 
//reverse
    for (int i = 0; i < N; i++)
    cout << " " << array[i] << " ";
    return 0;
ОШИБОЧКА

$ make all
g++ -g -c testrev.cpp -o testrev.o
testrev.cpp: In function 'int main()':
testrev.cpp:40: error: cannot convert 'std::vector<float, std::allocator<float>
>*' to 'float*' for argument '1' to 'bool reverse(float*, int)'
make: *** [testrev.o] Error 1

 Комментарий модератора 
Используйте теги форматирования кода!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
18.05.2011, 04:37     Обращение содержимого массива #2
Оно и понятно, т.к. float* и vector<float> совсем не одно и тоже. Убираешь vector, раскомментируешь код со статическим массивом меняешь float array[N] на float *array = new float [N].
Selle
 Аватар для Selle
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 15
19.05.2011, 19:05  [ТС]     Обращение содержимого массива #3
Ага...
reverse.cpp без видимых ошибок?

Добавлено через 3 часа 42 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "reverse.h"
#include "swap.h"
 
bool mreverse (float * array, int N)
{
    float  first = * array;
    float  last =  * (array + N-1);
    cout << endl;
   
    for(int i=0,j=N; i < N/2.0, j > N/2.0; i++,j--)
    {
            mswap(&first,&last);
            *(array+i) = first;
            *(array +j-1) = last;
            first = *(array +i +1);
            last = *(array +j - 2);
 
    }
        return true;
}
Вот это правильная программа!)))

Добавлено через 3 минуты
Ща займёмся псевдокодом!!! Хеххехехе.....
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
19.05.2011, 19:07     Обращение содержимого массива #4
простите разве это не проще делается?? ...
C++
1
2
3
4
5
6
bool swapmem(double* arr, int n) {
    int sz=n;
    for (int i=0; i<sz/2; i++)
        std::swap(arr[i],arr[sz-i-1]);
    return 0;
}
Selle
 Аватар для Selle
0 / 0 / 0
Регистрация: 13.05.2011
Сообщений: 15
22.05.2011, 21:27  [ТС]     Обращение содержимого массива #5
Делается, делается!
Только я уж сдала!))))Не хочется возвращаться....
Есть вопросы поважнее, например, размер очереди посчитать!)))Псевдокод!
Yandex
Объявления
22.05.2011, 21:27     Обращение содержимого массива
Ответ Создать тему
Опции темы

Текущее время: 07:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru