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

Массив в C++ (подмога с исправлением ошибки) - C++

Восстановить пароль Регистрация
 
YuninDen
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 14
19.11.2011, 07:59     Массив в C++ (подмога с исправлением ошибки) #1
Проблема в том, что никак не могу заставить нижнюю функцию (is_sorted) работать. Смысл её в том, чтобы проверить упорядочен ли массив по возрастанию.

Спасибо всем откликнувшимся.

P.S. Код C++


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
81
82
83
84
85
86
87
88
89
#include<iostream>    
#include<locale>    //!!! Отвечает за работу с локализацией ОС
#include<iomanip>
#include<math.h>
#include<conio.h>
#include<String.h>
#include<ctype.h>
#include<stdlib.h>
#include<windows.h>
#include <vector>
#include <iterator>
#include <algorithm>
#include <numeric>
 
 
#include<fstream> // Этот файл обеспечивает работу с файлами
using namespace std; 
/* если с файлом работают как главная программа, так и функции, лучше объявить его как глобальную переменную */
ifstream file("test.txt");
// Объявляем функцию, которая будет выдавать индексы:
void ShowIndex( int , float );
 
bool is_sorted(int *array, int size);
 
int main()
{    
    if(SetConsoleCP(1251)==0)
    {
        cerr<<"Fialed to set codepage!"<<endl;
    }
    if(SetConsoleOutputCP(1251)==0)
    {
        cerr<<"Failed to set OUTPUT page!"<<endl;
    }
    if(!file)
    {
        cerr<<"Файл test.txt не существует\n";
        return 0;
    }
    float n, min, max; // число, считываемое из файла, минимум и максимум 
    int k=0; // количество чисел в файле
 
 
    while (1) // как бы бесконечный цикл
    {
        file>>n;
        if (file.eof()) break; 
// если достигнут конец файла, выходим из цикла
        if (!k) // если считано первое число (k=0)
        {
            min = n; 
            max = n;
        }
        else // если число – не первое
        {
            if (n<min) min=n; 
            // если встретилось число меньше, заменяем значение min
            if (n>max) max=n; 
            // если встретилось число больше, заменяем значение max
        }
        cout<<n<<' '; k++; 
        /* выводим считанное число на экран и увеличиваем счетчик прочитанных чисел */
    }
    cout << endl; // завершаем вывод переводом курсора
    cout<<"Количество чисел в файле: " << k << endl;
    cout<<"Минимальный элемент: " << min<<endl;
    cout<<"Номер(а) минимального элемента: ";
    ShowIndex(k, min); 
    // вызываем функцию и передаем ей количество элементов и значение min
    cout<<"Максимальный элемент: " << max <<endl;
    cout<<"Номер(а) максимального элемента: " ;
    ShowIndex(k, max); 
    // вызываем функцию и передаем ей количество элементов и значение max
 
 
 
    
 
    _getch();
    return 0;
}
 
    bool is_sorted(int *array, int size) {  //Никак не могу заставить эту ф-ию работать
    for (int i = 0; i < size-1; i++) {
    if (array[i+1] > array[i])
    return false;
    }
    return true;
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
19.11.2011, 09:49     Массив в C++ (подмога с исправлением ошибки) #2
я не очень понял как вы хотите чтобы она работала..
C++
1
2
3
4
5
6
7
bool is_sorted(int *array, int size) {  //Никак не могу заставить эту ф-ию работать
    for (int i = 0; i < size-1; i++) {
    if (array[i+1] > array[i])
    return false;
    }
    return true;
    }
Если элемент i+1 больше i,то мы возвращаем 0?
я думаю вот так
C++
1
2
3
4
5
6
bool is_sorted(int *array, int size) {  //Никак не могу заставить эту ф-ию работать 
for (int i = 0; i < size-1; i++) {
    if (array[i+1] < array[i])
return false;
}
return true;    }
вроде так должно работать
YuninDen
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 14
19.11.2011, 10:30  [ТС]     Массив в C++ (подмога с исправлением ошибки) #3
=) - Смысл в том, что я её никак в "main" не затощу. Какие значения из майн брать, вместо *array и size?
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
19.11.2011, 17:58     Массив в C++ (подмога с исправлением ошибки) #4
всмысле?те же и берите.
Значения массива то у вас изменится,размер остается таким же.
Вот и все)
Или я не прав?
thick_int
Заблокирован
19.11.2011, 18:42     Массив в C++ (подмога с исправлением ошибки) #5
По всей видимости (логически) функция написана правильно. Но сами посмотрите, что будет, если внутри этой функции выполняяется оператор из строки 3, когда
C++
1
i ==  size-1
.
Очевидно имеем выход за границы массива.
Bers
Заблокирован
19.11.2011, 18:57     Массив в C++ (подмога с исправлением ошибки) #6
Цитата Сообщение от thick_int Посмотреть сообщение
Очевидно имеем выход за границы массива.
с какой стати?
thick_int
Заблокирован
19.11.2011, 19:05     Массив в C++ (подмога с исправлением ошибки) #7
Спутал просто знак < с <=.
Тогда, как вариант.
Что нужно узнать просто упорядоченность или строгую упорядоченность?
Bers
Заблокирован
19.11.2011, 19:07     Массив в C++ (подмога с исправлением ошибки) #8
действительно)
YuninDen
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 14
19.11.2011, 19:44  [ТС]     Массив в C++ (подмога с исправлением ошибки) #9
Ну просто значения *array и size до этого не фигурируют (вроде) - вопрос в том как мне их получить чтобы ф-ия работала правильно ))
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
19.11.2011, 20:46     Массив в C++ (подмога с исправлением ошибки) #10
Создаем массив и считываем туда данные,размер массива узнаем либо как при считывании i++ и запоминаем это значение ,либо как
C++
1
sizeof(array)/sizeof(int);
Bers
Заблокирован
19.11.2011, 20:47     Массив в C++ (подмога с исправлением ошибки) #11
Цитата Сообщение от Rexer Посмотреть сообщение
Создаем массив и считываем туда данные,размер массива узнаем либо как при считывании i++ и запоминаем это значение ,либо как
Код C++
1
sizeof(array)/sizeof(int);

Не забудьте объяснить, когда нельзя таким образом узнать размер массива
Rexer
 Аватар для Rexer
151 / 150 / 19
Регистрация: 10.10.2010
Сообщений: 691
20.11.2011, 00:36     Массив в C++ (подмога с исправлением ошибки) #12
Уважаемый Bers,а не могли бы вы уточнить?
Когда нельзя пользоваться таким методом?
Bers
Заблокирован
20.11.2011, 04:23     Массив в C++ (подмога с исправлением ошибки) #13
Цитата Сообщение от Rexer Посмотреть сообщение
Уважаемый Bers,а не могли бы вы уточнить?
Когда нельзя пользоваться таким методом?
Таким способом нельзя узнать под какое количество элементов было зарезервировано памяти для динамического массива. Только для статического.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 14:39     Массив в C++ (подмога с исправлением ошибки)
Еще ссылки по теме:

Шифрование текста. нужна подмога в дешифровке C++
C++ Динамический массив, ошибки в программе
C++ Указатель на массив и ошибки С2057, С2540

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YuninDen
1 / 1 / 0
Регистрация: 22.10.2011
Сообщений: 14
20.11.2011, 14:39  [ТС]     Массив в C++ (подмога с исправлением ошибки) #14
Ну так поможете с полным кодом программы? (т.е. ввести ф-ию в майн, вызвать её оттуда с правильными значениями)

P.S. Посмотрите сколько библиотек подключил . Это извращение какое-то
Yandex
Объявления
20.11.2011, 14:39     Массив в C++ (подмога с исправлением ошибки)
Ответ Создать тему
Опции темы

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