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

Найти максимальную сумму 3 чисел в каждой строке файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перечислить дни, на которые приходится пятница 13-го числа http://www.cyberforum.ru/cpp-beginners/thread666733.html
компилятор усиленно ругается на vector есть и другие мелкие ошибки.. не могу разобраться,объясните.. *Перечислить дни, на которые приходится пятница 13-го числа в заданном диапазоне лет из интервала 1901-2099 г.г.*/ #include "stdafx.h" #include <cstdlib> #include <iostream>
C++ Написать защиту от ввода чисел с плавающей точкой, отрицательных чисел и символов Привет всем! Вот пишу программу, преподаватель сказал чтобы написал защиту от ввода чисел с плавающей точкой, отрицательных, символов. В общем нужны по условию задачи только натуральные числа. Как это осуществить? Вот моя защита от отр. чисел: cin >> a; while (1) { if (a>0) {cout <<"vvedite granicy b\n";break;} else {cout << "Ne naturalnoe chislo\n" << "Povtorite vvod\n";... http://www.cyberforum.ru/cpp-beginners/thread666723.html
вывод массива gdi+ C++
как вывести (нарисовать) на экран цифры, которые в цикле увеличиваются, т.е. сначала вывести 10, потом 20, 30 и т.д. , есть ли для этого какая то функция? Среда разработки Visual Studio 2008
C++ Найти все пары дружественных чисел, не превосходящих заданного натурального числа N
Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого, кроме самого этого числа. Найти все пары дружественных чисел, не превосходящих заданного натурального числа N.
C++ MFC книги http://www.cyberforum.ru/cpp-beginners/thread666695.html
Доброго времени суток. Посоветуйте какие-нибудь хорошие книги по MFC для новичка. И лучше всего, чтобы их можно было бы скачать) Т.к. на mfc у нас отведено всего 2 недели (такая уж система образования), естественно я не собираюсь ничего покупать:) Благодарю.
C++ Работа с реестром Доброго времени суток. Читаю в MSDN про работу с реестром и, собственно, начал с компиляции примера кода, по этому адресу. // QueryKey - Enumerates the subkeys of key and its associated values. // hKey - Key whose subkeys and values are to be enumerated. #include <windows.h> #include <stdio.h> #include <tchar.h> #define MAX_KEY_LENGTH 255 #define MAX_VALUE_NAME 16383 подробнее

Показать сообщение отдельно
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.10.2012, 07:29     Найти максимальную сумму 3 чисел в каждой строке файла
do while - бесконечный цикл. Как определили, что указатель в файле сбивается? Логика программы непонятна. Можете описать, алгоритм поиска максимальной суммы 3 чисел и вывода соответсвующих букв ?

Добавлено через 1 часа 38 минут
Код
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
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <cctype> // для isdigit()
#include <algorithm> // для sort() и count()
using namespace std;
 
const int N = 3; // количество чисел в максимальной сумме
 
//функция помещает в вектор index 
// индексы N наибольших чисел из вектора vec
 
void maxsumN(const vector <float> &vec, vector <int> &index)
{
    for (int i = 0; i < N; i++) // поиск N индексов 
    {
        float max = 0; // для наибольшего числа
        int maxi = 0; // для индекса наибольшего числа 
        for (int j = 0; j < vec.size(); j++) // перебор чисел в векторе
        {
            float temp = 0; // для текущего числа 
            if (i == 0) temp = vec[j]; // если ещё ни один индекс не найден
            else if (!count(index.begin(), index.end(), j)) temp = vec[j]; // если индексы уже найдены и j не равен ни одному из них
                 else continue; // если такой индекс уже есть в найденных, то пропускаем
            if (temp > max)  
            {
                max = temp; // новое максимальное значение
                maxi = j;  // индекс нового максимального значения
            } 
        }
        index.push_back(maxi); // найденный индекс помещаем в index
        max = 0;
    }
    
    sort(index.begin(), index.end()); // сортируем индексы по возрастанию
}
 
int main()
{
    ifstream f("input.txt");
    ofstream n("output.txt");
    
    int v;
    f >> v;
    
    for (int i = 0; i < v; i++)
    {
        vector <float> vec; // вектор для чисел
        float a;
        while (f >> a) // читаем до символов. При считывании символа вместо числа, 
                       // f установит флаг ошибки и будет выход из цикла
            if (f) vec.push_back(a); // если считали без ошибки, добавляем число в вектор
        f.clear(); // сбрасываем флаг ошибки
        
        string str; // строка для символов
        char ch;
        while (f >> ch) // чтение символов до цифры
            if (!isdigit(ch)) str.push_back(ch); // если символ не цифра, то добавляем его в str 
            else break; // если считана цифра, выход
        f.clear();
        f.seekg(-1, ios::cur); // возвращаем курсор на начало строки с цифрами
        
        for (int i = 0; i < vec.size(); i++) // вывод чисел из вектора
            cout << vec[i] << " ";
        cout << endl;
    
        for (int i = 0; i < str.size(); i++) // вывод символов из строки
            cout << str[i] << " ";
        cout << endl;
    
        vector <int> index; // вектор для индексов наибольших из считанных чисел 
        maxsumN(vec, index); // функция помещает в вектор index 
                             // индексы N наибольших чисел из вектора vec
 
        float maxsum = 0;
        for (int i = 0; i < index.size(); i++) // получение максимальной суммы N чисел
                                               // и вывод на экран 
        {
            maxsum += vec[index[i]];
            cout << vec[index[i]] << " + ";
        }
        cout << "\b\b";
        cout << "= " << maxsum << endl; // вывод максимальной суммы
 
        for (int i = 0; i < index.size(); i++) // вывод из строки str символов по индексам в index
            cout << str[index[i]] << " ";
        cout << endl << endl;
 
        vec.clear(); // очистка вектора и строки для следующего считывания из файла
        str.clear();
    }
    
    f.close();
    
    cin.get();
    return 0;
}
 
Текущее время: 13:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru