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

не работает функция, не могу найти причину - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ что это за ошибка http://www.cyberforum.ru/cpp-beginners/thread953808.html
Вот http://snag.gy/Z3aDn.jpg
C++ Динамический массив структур. Почему данные доступны после выполнения операции delete [] Всем привет! Выполнил вот такое задание. После того как вывелись данные трех структур, очищаю выделенную область памяти оператором delete ... Чтобы убедиться, что память очистилась, после оператора delete вывожу количество калорий конфет второй структуры данных. В результате на экране выводиться число 500... Почему так происходит? Что я не так делаю? Спасибо! #include <iostream> #include... http://www.cyberforum.ru/cpp-beginners/thread953785.html
Ошибка при компиляции C++
Пытаюсь перегрузить оператор индексации, но на этапе компиляции при обращении к экземпляру класса Elem выводит ошибку "warning: pointer to a function used in arithmetic". Конструктор по умолчанию заполняет первые два элемента статического массива, если же работать с динамическим массивом - то всё работает как надо. Помогите исправить ошибку в приложенном ниже варианте #include <iostream>...
В чем ошибка? C++
#include <iostream> using namespace std; int value;{ cout <<"Enter number:" <<endl; cin >> value; if(value>0)
C++ Ошибка с оператором switch http://www.cyberforum.ru/cpp-beginners/thread953735.html
Добрый день! Я писала программу в VS2010, но потом появилась необходимость запустить программу в 2008. После запуска, она ругается на этот участок кода: BOOL WINAPI WndProc (HWND hwnd,UINT uMsg,WPARAM wpar,LPARAM lpar ) { static HWND hComb; switch (uMsg) { case WM_INITDIALOG: char COMmas, COMnum; //массив для полного названия ком-порта с номером int...
C++ Ребята а что FILE * больше 4Gb файлы не поддерживает? Ребята а что FILE * больше 4Gb файлы не поддерживает? подробнее

Показать сообщение отдельно
h_wolf
9 / 9 / 1
Регистрация: 24.01.2013
Сообщений: 212

не работает функция, не могу найти причину - C++

13.09.2013, 16:14. Просмотров 295. Ответов 7
Метки (Все метки)

Всех с праздником!

Задача:

Необходимо написать программу состоящую из нескольких функция - принимающая данные в массив, выводящая на экран массив и функция реверса(поменять порядок элементов массива наоборот не трогая при этом первый и последний эелемнт).
Важно: Максимальный размер массива 10ть элементов, но пользователь должен иметь возможность прекратить ввод раньше, в этом случае работать только с введенными элементами массива(тут кстати тоже непонятки, где-то туплю - в массив пишется 10ть элементов, но ввести можно 11ть. не пойму почему)

Код:

Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
int Fill_array(double, int);
void Show_array(double, int);
void Revers_array(double, int);
 
const int ArrSize=10;
 
int main()
{
    setlocale(LC_CTYPE, "");
 
    double Arr[ArrSize]={};
    int Count=0;
    cout<<"Заполните массив double значениями: ";
    Count=Fill_array(Arr, ArrSize); //получаем действительно количество элементов в массиве
    cout<<"Всего значений внесено: "<<Count<<endl;
    cout<<"Массив до реверса:\t";
    Show_array(Arr, Count);
    Revers_array(Arr, Count);
    cout<<"Массив после реверса:\t";
    Show_array(Arr, Count);
 
    return 0;
}
 
int Fill_array(double arr[], int as)
{
    int counter=0;
    int i=0;
    while((cin>>arr[i]) && (counter<as))
    {
        i++;
        counter++;
    }
    return counter;
}
 
void Show_array(double arr[], int counter)
{
    for(int i=0; i<counter; i++)
        cout<<arr[i]<<"\t";
    cout<<endl;
}
 
void Revers_array(double arr[], int counter)        //вот эта функция не работает. Элементы местами не меняются.
{
    double tmp;
 
    for(int i=1, b=counter-1; i>counter; i++, b--)
    {
        tmp=arr[b];
        arr[b]=arr[i];
        arr[i]=tmp;
    }
}


Конкретизирую вопросы:
  1. Почему не работает функция Reverse_array?
  2. почему вводится программа ожидает ввода 11 значений а не 10?

Добавление: Ошибка где-то в условии цикла for ф-и Revers_array, только вот как его правильно записать...

Добавлено через 4 минуты
Так-с, с первым вопросом разобрался.

Вот так это должно быть:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Revers_array(double* arr, int counter)
{
    double tmp;
 
    for(int i=1, b=counter-2; i<b; i++, b--)
    {
        tmp=arr[b];
        arr[b]=arr[i];
        arr[i]=tmp;
 
    }
}


В силе остается второй вопрос...

Добавлено через 28 минут
В общем всем спасибо, сам все отловил.

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

Кликните здесь для просмотра всего текста
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
#include <iostream>
 
using namespace std;
 
int Fill_array(double*, int);
void Show_array(double*, int);
void Revers_array(double*, int);
 
const int ArrSize=10;
 
int main()
{
    setlocale(LC_CTYPE, "");
 
    double Arr[ArrSize]={};
    int Count=0;
    cout<<"Заполните массив double значениями: ";
    Count=Fill_array(Arr, ArrSize); //получаем действительно количество элементов в массиве
    cout<<"Всего значений внесено: "<<Count<<endl;
    cout<<"Массив до реверса:\t";
    Show_array(Arr, Count);
    Revers_array(Arr, Count);
    cout<<"Массив после реверса:\t";
    Show_array(Arr, Count);
 
    return 0;
}
 
int Fill_array(double* arr, int as)
{
    int counter=1;
    int i=0;
    while((cin>>arr[i]) && (counter<as))
    {
        i++;
        counter++;
    }
    return counter;
}
 
void Show_array(double* arr, int counter)
{
    for(int i=0; i<counter; i++)
        cout<<arr[i]<<"\t";
    cout<<endl;
}
 
void Revers_array(double* arr, int counter)
{
    double tmp;
 
    for(int i=1, b=counter-2; i<b; i++, b--)
    {
        tmp=arr[b];
        arr[b]=arr[i];
        arr[i]=tmp;
 
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru