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

Определить, существует ли треугольник со сторонами a, b, c - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ класс Символьное дифференцирование. http://www.cyberforum.ru/cpp-beginners/thread65209.html
Помогите пожалуйста с созданием такого класса. НОВЫЕ ПОНЯТИЯ: наследование, виртуальные методы. Реализовать абстрактный класс Expression с чисто виртуальными методами Expression *diff(); void...
C++ Надо решить контрольную. Помогите пожалуйста решить контрольную работу по информатике: 1) Написать программу на языке Visual Studio 2008, которая бы принимала в себя два числа, а затем делала бы их сложения. 2)... http://www.cyberforum.ru/cpp-beginners/thread65177.html
Несколько заданий - действия над числами C++
Если кто может, может поможет?? не успеваю и не знаю как это делать пока.... Задача 1: Написать программу на Си для решения задачи в соответствии с вариантом. Варианты: 16) Вводиться трехзначное...
C++ Рекурсия:написать функцию которая возвращает степень числа
помогите написать рекурсию которая возводит число в степень..из книги Напишите рекурсивную функцию которая возводит число в степень путем многократного умножения числа самого на себя,напрмер если...
C++ Конечный автомат http://www.cyberforum.ru/cpp-beginners/thread65156.html
реализовать метод поиска строки в текстовом файле с помощью конечного автомата
C++ Упорядочивание массивов Помогите, пожалуйста, решить задачу... Написать программу упорядочивание массивов типа int, float и complex по убыванию. Функции, упорядочивающие массивы имеют одно и тоже имя. Это надо в с++... подробнее

Показать сообщение отдельно
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
28.11.2009, 19:02
При работе над программой с массивами возник такой вот вопрос: ввожу элементы масива из файла с помощью ifstream. Программа сделана так, что в файле первый элемент должен был указывать число элементов массива, над которыми будут производиться операции. Столкнулся с проблемой: файл создан, но он пустой. Тогда вылетает ошибка. Как можно её предотвратить? Можно ли сделать ввод из файла, не указывая первым элементом число всех элементов массива?

Фрагмент программы:
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <fstream>
#include <sstream>
#include <cfloat>
#include <cmath>
 
using namespace std;
 
bool StrToNum (string sz, int & number)
{
    istringstream stream(sz);
    stream >> number;
    return (!stream.fail()) && (int(stream.tellg()) == sz.length()) && (number >= 0);
}
 
bool StrToNum (string sz, float & number)
{
    istringstream stream(sz);
    stream >> number;
    return (!stream.fail()) && (int(stream.tellg()) == sz.length()) && (fabs(number) <= FLT_MAX);
}
 
bool ReadNumber (int & x)
{
    string a;    
    do
    {
        cin >> a;
        if (StrToNum(a, x)) break;
        cout << endl << "Число введено неверно или оно не входит в допустимый диапозон значений!" << endl
             << "Повторите ввод." << endl << endl;
    }
    while (true);
    return true;
}
 
bool ReadNumber (float & x)
{
    string a;    
    do
    {
        cin >> a;
        if (StrToNum(a, x)) break;
        cout << endl << "Число введено неверно или оно не входит в допустимый диапозон значений!" << endl
             << "Повторите ввод." << endl << endl;
    }
    while (true);
    return true;
}
 
int ProgramSecondBody()
{
        ifstream first("first.txt");
        ifstream second("second.txt");
 
        if(!first.is_open())
        {
                cout << "Ошибка! Файл first.txt не найден!" << endl << endl;
                cin.get();
                cin.get();
                return 0;
        }
        if(!second.is_open())
        {
                cout << "Ошибка! Файл second.txt не найден!" << endl << endl;
                cin.get();
                cin.get();
                return 0;
        }
        float *masA, *masB, min1, min2, max, count=0;
        int  n, m, i;
        bool fl = true;
 
        first >> n;
        second >> m;
 
        masA = new float[n];
        
        if (!masA)
        {
                cout << "Программе не хватает памяти для работы!" << endl;
                delete [] masA;
                cin.get();
                cin.get();
                return 1;
        }
        
        masB = new float[m];
 
        if (!masB)
        {
                cout << "Программе не хватает памяти для работы!" << endl;
                delete [] masB;
                cin.get();
                cin.get();
                return 1;
        }
        
        for(int i = 0; i < n; i++)
                first >> masA[i]; 
 
        for(int i = 0; i < m; i++)
                second >> masB[i];
                
        cout << "Внимание! При наличии ошибок в файле содержимое может отображаться некорректно." << endl << endl
        << "Исходный массив 1:" << endl;
             for(i = 0; i < n; i++)
                 cout << masA[i] << " " << endl;
                 
        cout << endl << "Исходный массив 2:" << endl;
             for(i = 0; i < m; i++)
                 cout << masB[i] << " " << endl;
        
        min1 = masA[0]; //Начало поиска минимального элемента
        for(i = 0; i < n; i++)
            if(min1 > masA[i])
                min1 = masA[i];
                min2 = min1-1;
                max = masA[0];
                for(i = 0; i < n; i++)
                         if(max < masA[i])
                         max = masA[i];
                while(fl && count <= n)
                {
                        fl = false;
                        min1 = max;
                        for(i = 0; i < n; i++)
                                 if(min1 > masA[i] && masA[i] > min2)
                                 min1 = masA[i];
                        for(i = 0; i < m; i++)
                                 if(min1 == masB[i])
                                        {
                                                fl = true;
                                                min2 = min1;
                                        }
                        count++;
                }
                if (count == n+1)
                        cout << endl << "Искомого элемента нет." << endl
                        << "Для выхода нажмите Ctrl+C." << endl;
                else
                        cout << endl << "Искомый элемент равен " << min1 << "." << endl
                        << "Для выхода нажмите Ctrl+C." << endl;
        cin.get();
        cin.get();
        return 0; 
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru