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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
#1

отображения чисел в массиве - C++

18.06.2013, 15:33. Просмотров 248. Ответов 6
Метки нет (Все метки)

Проблема такова, я задаю массив, он находит max i min элемент. Но когда происходит замена после максимального минимальным, замененные числа он выводит, а те которые были не заменины, делает непонятными.
основной код:
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
90
91
92
93
94
95
96
97
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include "array.h"
#include "menu.h"
#include "readfile.cpp"
 
void main(){
.
    menu Menu1;
    ARRAY *A;
 
    Menu1.Add("1. Enter size");
    Menu1.Add("2. Enter the elements");
    Menu1.Add("3. Get array from file");
    Menu1.Add("4. Find new array");
    Menu1.Add("5. Save array in file");
    Menu1.Add("q. Exit!");
    for(int ch = 0; ch != 'q';){
        clrscr();
        Menu1.Show();
        ch = getch();
        clrscr();
        switch(ch){
            case '1':{
                int n;
                do{
                    clrscr();
                    cout << "Enter size of array: ";
                    cin >> n;
                }while(n < 2);
                clrscr();
                A = new ARRAY(n);
                cout << "Ok, size is " << A->Size();
            }break;
            case '2':{
                cout << "Please enter the elements:\n";
                for(int i = 0; i < A->Size(); i++){
                    cout << "[" << i + 1 << "] = ";
                    int val = 0;
                    cin >> val;
                    A->Set(i, val);
                }
                cout << "\nElements are added :)";
            }break;
            case '3':{
            //ÔóГ*êöèÿ äëÿ Г·ГІГҐГ*ГЁГї Г¬Г*Г±Г±ГЁГўГ* Г± ГґГ*éëГ*
                FILE* file;
                file = fopen("save.txt", "rb");
                if(file){
                    for(int i = 0; i < A->Size(); i++)
                        A->Set(i, GetIntFromFile(file));
                     cout<<"Congratulations your array is read from file!";
                }
                else cout << "File faild";
            }break;
            case '4':{
                cout << "Now will find min and max element elementt..";
                int Min = 0, Max = 0;
         
                for(int i = 1; i < A->Size(); i++){
                    if(A->Get(i) < A->Get(Min) ) Min = i;
                    if(A->Get(i) > A->Get(Max)) Max = i;
                }
                cout << "\n max element is " << Max << " by value " << A->Get(Max);
                cout << "\n min element is " << Min  << " by value " << A->Get(Min);;
                cout << "\nNow will change the array..";
             
                ARRAY *temp = new ARRAY(A->Size());
                for(int i = 0, j = Max+1; i < A->Size(); i++)
                     temp->Set(j++, A->Get(Min));
                delete A;
                A = new ARRAY(temp->Size());
                for(int i = 0; i < A->Size(); A->Set(i, temp->Get(i)), i++);
                delete temp;
 
          
                cout << "\nArray elements: ";
                for(int i = 0; i < A->Size(); i++) cout << A->Get(i) << "   ";
            }break;
            case '5':{
   
                FILE* file;
                file = fopen("save.txt", "wb");
                if(file){
                    for(int i = 0; i < A->Size(); i++){
                        int temp = A->Get(i);
                        fwrite(&temp, sizeof(temp), 1, file);
                    }
                    cout<<"Congratulations your array is saved!";
                }
                else cout << "File faild";
            }break;
        }
        getch();
    }
}
Array.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef arrayH
    #define arrayH
// Гђ.2 ÑîçäГ*Г*ГЁГҐ ГЄГ«Г*Г±Г±Г* äëÿ Г°Г*áîòû Г± Г¬Г*ññèâîì.
    class ARRAY{
        int size;
        int *ptr;
    public:
        ARRAY(int);// ГЄГ®Г*ñòðóêòîð
        ~ARRAY();  // äèñòðóêòîð
 
        int Size(){return size;}//ГґГіГ*êöèÿ äëÿ Г§Г*ïîëГ*ГҐГ*ГЁГї Г¬Г*Г±Г±ГЁГўГ*
        //void SetSize(int);
 
        void Set(int, int); //ГґГіГ*êöèÿ äëÿ ñîõðГ*Г*ГҐГ*ГЁГї Г¬Г*Г±Г±ГЁГўГ* Гў ГЇГ*ìÿòè
        int Get(int);       // ГґГіГ*êöèÿ äëÿ ñ÷èòûâГ*Г*ГЁГї Г¬Г*Г±Г±ГЁГўГ* Г± ГЇГ*ìÿòè
    };
    #include "array.cpp"
#endif
Array.cpp:
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
#ifndef arrayCPP
    #define arrayCPP
// Гђ2. ÑîçäГ*Г*ГЁГҐ ГЄГ«Г*Г±Г±Г* äëÿ Г°Г*áîòû Г± Г¬Г*ññèâîì.
   #include "array.h"
// Гђ2.1 ÑîçäГ*Г*ГЁГҐ ГЄГ®Г*ñòðóêòîðГ* äëÿ ââîäГ* Г¬Г*Г±Г±ГЁГўГ*.
    ARRAY::ARRAY(int s = 0){
        if(s > 0) ptr = new int[s];
        else ptr = 0;
 
        size = s;
    }
// Гђ2.2 ÑîçäГ*Г*ГЁГҐ äèñòðóêòîðГ* äëÿ
    ARRAY::~ARRAY(){
        if(ptr){
            size = 0;
            delete ptr;
        }
    }
// Гђ2.3 ÑîçäГ*Г*ГЁГҐ ГґГіГ*êöèè äëÿ ñîõðГ*Г*ГҐГ*ГЁГї Г¬Г*Г±Г±ГЁГўГ* Гў ГЇГ*ìÿòè
    void ARRAY::Set(int i, int val){
        if(ptr && i >= 0 && i < size)
            ptr[i] = val;
    }
// 2.4 ÑîçäГ*Г*ГЁГҐ ГґГіГ*êöèè äëÿ ñ÷èòûâГ*Г*ГЁГї Г¬Г*Г±Г±ГЁГўГ* Г± ГЇГ*ìÿòè.
    int ARRAY::Get(int i){
        if(ptr && i >= 0 && i < size)
            return ptr[i];
        else return 0;
    }
#endif
menu.h:
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
#ifndef menuH
    #define menuH
// Гђ.3 ÑîçäГ*Г*ГЁГҐ ГЄГ«Г*Г±Г±Г* ìåГ*Гѕ.
    #include <iostream.h>
 
    class menu{
 
        struct PosMenu{         //ïîçèöèè ìåГ*Гѕ
 
            char *Name;         //Г*Г*çâГ*Г*ГЁГҐ ïîçèöèè
            PosMenu *Next;      //ГіГЄГ*Г§Г*òåëü Г*Г* ñëåäóþùèé ïîçèöèþ
 
        } *ListMenu;  //ñïèñîê ГЇГіГ*êòîâ ìåГ*Гѕ
 
    public:
 
        menu()
        {ListMenu = NULL;
        }
        //~Menu();                       //îò÷èñòêГ* ГЇГ*ìÿòè îò Г±ГЇГЁГ±ГЄГ*
 
        void Show();      //äîáГ*âëåГ*ГЁГҐ Г*îâîãî ГЇГіГ*ГЄГІГ* ìåГ*Гѕ
        void Add(char*);  // ГіГ¤Г*ëåГ*ГЁГҐ ГЇГіГ*ГЄГІГ* ГЁГ§ ìåГ*Гѕ
        void Del();
    };
    
    #include "menu.cpp"
    
#endif
menu.cpp:
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
#ifndef menuCPP
    #define menuCPP
    #include "menu.h"
 // Гђ3.1 ÑîçäГ*Г*ГЁГҐ ГґГіГ*êöèè äëÿ âûâîä ìåГ*Гѕ Г*Г* ГЅГЄГ°Г*Г*.
    void menu::Show(){
        PosMenu *Current = ListMenu;
        //system("cls");
        cout << "Menu:\n\n";
        while(Current){
            cout << "  " << Current->Name << '\n';
            Current = Current->Next;
        }
    }
    // Гђ3.2 ÑîçäГ*Г*ГЁГҐ ГґГіГ*êöèè äëÿ äîáГ*âëåГ*ГЁГї ГЇГіГ*êòîâ Гў ìåГ*Гѕ.
    void menu::Add(char* str){     //äîáГ*âëåГ*ГЁГҐ Г*îâîãî ГЇГіГ*ГЄГІГ* ìåГ*Гѕ
        if(!ListMenu){
            ListMenu = new PosMenu;
            ListMenu->Next = NULL;
            ListMenu->Name = str;
        }
        else{
            PosMenu* temp = ListMenu;
            while(temp->Next) temp = temp->Next;
            temp->Next = new PosMenu;
            temp = temp->Next;
            temp->Next = NULL;
            temp->Name = str;
        }
 
    }
    // Гђ3.3 ÑîçäГ*Г*ГЁГҐ ГґГіГ*êöèè äëÿ ГіГ¤Г*ëåГ*ГЁГї ГЇГіГ*êòîâ ГЁГ§ ìåГ*Гѕ.
    void menu::Del(){
        //ГіГ¤Г*ëåГ*ГЁГҐ ГЇГіГ*ГЄГІГ* ìåГ*Гѕ
        //âîçìîæГ*Г® ñäåëГ*ГІГј ГўГ*ðèГ*Г*ГІ Г± ГіГ¤Г*ëåГ*ГЁГҐГ¬ Г*åñêîëüêèõ ГЇГіГ*êòîâ Г±Г°Г*çó
    }
#endif
readfile.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Р.4 Создание функции для записи и считки массива из файла.
#include <stdio.h>
int GetIntFromFile(FILE *file){
    char ch;
    do{
    int num=0;
    fread(&ch,1,1,file);
        if(ch >= '0' && ch <= '9'){
            bool sign = false;
            while(ch != ' ' && ch != '\n' && !feof(file)){
                if(ch == '-' && !sign) sign = true;
                else if(ch >= '0' && ch <= '9' && !feof(file))
                    num=num *10 + (sign ? -1 : 1) * (ch - '0');
                else break;
                fread(&ch,1,1,file);
            }
            return num;
        }
    }while(!feof(file));
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 15:33     отображения чисел в массиве
Посмотрите здесь:

C++ Дан массив из N целых чисел. Выяснить имеется ли в массиве хотя бы одно нечетное отрицательное число и определить его местонахождение в массиве
В массиве целых чисел найти и распечатать все пары одинаковых чисел C++
C++ Дан массив целых чисел. Определить все уникальные числа в массиве и сколько раз каждое из них встречается в массиве.
C++ Найти сколько чисел в массиве больше суммы или меньше разности чисел
В массиве целых чисел найти количество чисел с наименьшим количеством цифр C++
В массиве из целых чисел найти среднее арифметическое тех чисел, которые начинаются с цифры 5 C++
C++ Отображения на экране чисел от 10 до 0
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.06.2013, 15:36     отображения чисел в массиве #2
Рейвол, а локализовать проблему никак? Зачем так много исходников?
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
18.06.2013, 15:39  [ТС]     отображения чисел в массиве #3
Tulosba, основная проблема в этой части кода:
C++
1
2
3
4
5
6
7
ARRAY *temp = new ARRAY(A->Size());
                for(int i = 0, j = Max+1; i < A->Size(); i++)
                     temp->Set(j++, A->Get(Min));
                delete A;
                A = new ARRAY(temp->Size());
                for(int i = 0; i < A->Size(); A->Set(i, temp->Get(i)), i++);
                delete temp;
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.06.2013, 15:59     отображения чисел в массиве #4
Рейвол, а Вам обязательно нужен самопальный ARRAY? Может есть смысл рассмотреть стандартные контейнеры?
Цитата Сообщение от Рейвол Посмотреть сообщение
#include "array.cpp"
Так делать не стоит.
Цитата Сообщение от Рейвол Посмотреть сообщение
temp->Set(j++, A->Get(Min));
если j станет больше или равен A->Size() то смысла в таком вызове не будет. И циклы какие-то странные.
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
18.06.2013, 16:14  [ТС]     отображения чисел в массиве #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Рейвол, а Вам обязательно нужен самопальный ARRAY? Может есть смысл рассмотреть стандартные контейнеры?


если j станет больше или равен A->Size() то смысла в таком вызове не будет. И циклы какие-то странные.
по заданию нам нужен именно такой ARRAY.

ну так j не может выйти за Size() так как, он находиться в пределах массива.
а если задавать что j < A->Size() результат от этого не меняется.
про циклы, а что с ними не так?
Tulosba
:)
Эксперт С++
4387 / 3230 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.06.2013, 16:23     отображения чисел в массиве #6
Цитата Сообщение от Рейвол Посмотреть сообщение
ну так j не может выйти за Size() так как, он находиться в пределах массива.
почему не может? В начале цикла j = Max+1 (Мах, как я понял, индекс элемента с максимальным значением). Если максимальный элемент является последним, то сразу же будет выход за пределы.
Другое дело, что у Вас защита внутри ARRAY::Set(), но это уже другая история.
Цитата Сообщение от Рейвол Посмотреть сообщение
про циклы, а что с ними не так?
например: лишние переменные, помещение тела цикла в секцию для изменения аргумента for().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2013, 19:12     отображения чисел в массиве
Еще ссылки по теме:

Проверить, есть ли в массиве А [n] числа В и С и определить, какое из чисел встречается в массиве чаще C++
В заданном массиве целых чисел найти все пары чисел, удовлетворяющих условию C++
C++ Найти 10 наибольших чисел в массиве из 10000 чисел и записать в массив
Как с использованием итераторов в массиве чисел найти количество чисел, меньших за введенное? C++
C++ В одномерном массиве подсчитать количество положительных чисел, отрицательных чисел и других символов

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

Или воспользуйтесь поиском по форуму:
Рейвол
2 / 2 / 0
Регистрация: 06.10.2012
Сообщений: 44
18.06.2013, 19:12  [ТС]     отображения чисел в массиве #7
Цитата Сообщение от Tulosba Посмотреть сообщение
почему не может? В начале цикла j = Max+1 (Мах, как я понял, индекс элемента с максимальным значением). Если максимальный элемент является последним, то сразу же будет выход за пределы.
Другое дело, что у Вас защита внутри ARRAY::Set(), но это уже другая история.

например: лишние переменные, помещение тела цикла в секцию для изменения аргумента for().
ну, возможно.


Ну может, тогда подскажите, что делать с этим, поскольку, у меня новых идей нет, я уже перепробовал несколько вариантов с этим кодом и как-то не получается. А переписывать код заново, как то полностью по другому, я не совсем понимаю как.
Yandex
Объявления
18.06.2013, 19:12     отображения чисел в массиве
Ответ Создать тему
Опции темы

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