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

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

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

Прата С. 6.6 - C++

23.09.2013, 13:14. Просмотров 355. Ответов 5
Метки нет (Все метки)

написал код, но после ввода первой структуры в цикле, выдает ошибку(
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
//6.6.cpp
#include <iostream>
using namespace std;
struct card 
{
       char name[50];
       double sum;
};
int main()
{
    cout << "Введите количество меценатов: ";
    int k;
    cin >> k;
    card * naim = new card[k];
    for (int i = k; i >= 0; i--)
    {
          cout << "\nВведите имя " << k << " мецената\n";
          cin >> naim[k].name;
          cout << "Введите сумму пожертвования " << k << " мецената\n";
          cin >> naim[k].sum;
    }
    for (int i = 0; naim[i].sum >= 10000, i <= k; i++)
        {
        cout << "\nGrand Patrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum < 10000)
             cout << "Ничего"; 
        }    
    for (int i = 0; naim[i].sum < 10000, i <= k; i++)    
        {
        cout << "\nPatrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum = 0)
             cout << "Ничего";
        }  
    cin.get();
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 13:14     Прата С. 6.6
Посмотрите здесь:

C++ - Прата задача 6.9 - C++
Подскажите пожалуйста в чем ошибка?не обрабатывается условие неправильного ввода имени файла. #include &lt;iostream&gt; #include &lt;fstream&gt; ...

Прата задача 6.9 - C++
Всем доброго времени суток, подскажите как сделать что бы программа в строке 32 принимала имена с пробелами. Если открываю файл без...

Прата и умные указатели - C++
Читаю Прата С. - Язык программирования С++. Лекции и упражнения - 2011, стр. 886: Пишу, компилирую - получаю ошибки: Кто не прав...

Прата, задача 2, глава 6 - C++
Доброго времени суток. Учу программирования по книжке Прата. И вот такая задача: &quot;Напишите программу, которая считывает до десяти...

Прата - составные типы - C++
Добрый день. Недавно начал заниматься С++ по книге Прата. Прошел четвертую главу и встретил такую задачу: Напишите программу С++,...

Ошибка в коде(С.Прата) - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; int _tmain(int argc, _TCHAR* argv) { std::string month= { ...

Прата -> Шлее = PROFIT? - C++
Изучением программирования занялся от безделья. Путём гугления выбрал С++. В качестве первой книги - Стивен Прата &quot;Язык программирования...

Ищу книгу С. Прата - C++
Всем добрый день! ищу книгу Стивена Прата &quot;Язык программирования C (Си). Лекции и упражнения, 5-е издание&quot; В интернете не нашёл, так как...

С.Прата глава 5(циклы) зад.4 - C++
Помогите с задачей: Вы продаёте книгу. Напишите программу, которая позволит ввести помесячные объемы продаж в течении года(в кол-ве...

книга прата с. глава 6 задание 7 - C++
Напишите программу, котрая читает слова по одному за раз, пока небудет введена отдельная буква q. После этого программа должна сообщить...

Листинг 4.13 Прата, массив структур - C++
// arrstruc.cpp -- an array of structures #include &lt;iostream&gt; struct inflatable { char name; float volume; double...

Странная задача из Прата 2011 - C++
Задача во вложении. Пользоваться циклами и ветвлениями нельзя, т.к. их еще не дают на этапе этого задания. Как понизить грейд? Что-то с...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
23.09.2013, 13:18     Прата С. 6.6 #2
проблема в индексации команда нью выделяет память под к элементов, однако индексация происходит с нуля. поэтому последний к-й элемент будет иметь индекс к-1, а у вас переменная цикла инициализируется значением к, что приводит к обращению вне памяти переменной
Более того в первом цикле не используется переменная цикла.
Вот исправленный код
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
int main()
{
    cout << "Введите количество меценатов: ";
    int k;
    cin >> k;
    card * naim = new card[k];
    for (int i = k-1; i >= 0; i--)
    {
          cout << "\nВведите имя " << i+1 << " мецената\n";
          cin >> naim[i].name;
          cout << "Введите сумму пожертвования " << i << " мецената\n";
          cin >> naim[i].sum;
    }
    for (int i = 0; naim[i].sum >= 10000, i < k; i++)
        {
        cout << "\nGrand Patrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum < 10000)
             cout << "Ничего"; 
        }    
    for (int i = 0; naim[i].sum < 10000, i < k; i++)    
        {
        cout << "\nPatrons: \n"
             << naim[i].name << "\t" << naim[i].sum << "\n";
        if (naim[i].sum = 0)
             cout << "Ничего";
        }  
    cin.get();
    cin.get();
    return 0;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2013, 13:38     Прата С. 6.6 #3
При таком условии в for():
C++
1
naim[i].sum >= 10000, i < k;
будет учитываться только то, что после запятой.
Brahmastra
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 8
23.09.2013, 13:56  [ТС]     Прата С. 6.6 #4
спасибо! HedgehogLu, исправил, вы тоже немного не дописали
в 12 строке ;-)
cout << "Введите сумму пожертвования " << i+1 << " мецената\n";

Добавлено через 9 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
При таком условии в for():
C++
1
naim[i].sum >= 10000, i < k;
будет учитываться только то, что после запятой.
заменил на &&, но что-то работает не так(
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
23.09.2013, 14:09     Прата С. 6.6 #5
сорри не досмотрел.
правил то только ту ошибку на которую указали
а в целом цикл вообще не правильный получается
т.к. цикл выполняется до тех пор пока выполняется условие (и ссно цикл вообще криво выполнялся, и останавливался когда натыкался на любого плательщика меньше 10000)
Поэтому правильно думаю будет так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 cout << "\nGrand Patrons: \n";
int res=0;
 for (int i = 0; i < k; i++)
        {
      if (naim[i].sum >= 10000) {
             cout<< naim[i].name << "\t" << naim[i].sum << "\n";
             res++;
             }
        }    
    if (!(res)) cout << "none"<<"\n";
 cout << "\nPatrons: \n";
    res=0;
 for (int i = 0; i < k; i++)
        {
      if (naim[i].sum <10000) {
             cout<< naim[i].name << "\t" << naim[i].sum << "\n";
             res++;
             }
        }    
    if (!(res)) cout << "none"<<"\n";
Brahmastra
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 8
23.09.2013, 14:24  [ТС]     Прата С. 6.6 #6
спасибо! добрый человек :-)
вот, если кому надо, готовая прога.
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
//6.6.cpp
#include <iostream>
using namespace std;
struct card 
{
       char name[50];
       double sum;
};
int main()
{
    cout << "Введите количество меценатов: ";
    int k;
    cin >> k;
    card * naim = new card[k];
    for (int i = k-1; i >= 0; i--)
    {
          cout << "\nВведите имя " << i+1 << " мецената\n";
          cin >> naim[i].name;
          cout << "Введите сумму пожертвования " << i+1 << " мецената\n";
          cin >> naim[i].sum;
    }
     cout << "\nGrand Patrons: \n";
     int res=0;
     for (int i = 0; i < k; i++)
        {
              if (naim[i].sum >= 10000) 
              {
              cout<< naim[i].name << "\t" << naim[i].sum << "\n";
              res++;
              }
        }    
    if (!(res)) cout << "none"<<"\n";
    cout << "\nPatrons: \n";
    res=0;
    for (int i = 0; i < k; i++)
        {
             if (naim[i].sum <10000) 
             {
             cout<< naim[i].name << "\t" << naim[i].sum << "\n";
             res++;
             }
        }    
    if (!(res)) cout << "none"<<"\n";  
    cin.get();
    cin.get();
    return 0;
}
Yandex
Объявления
23.09.2013, 14:24     Прата С. 6.6
Ответ Создать тему
Опции темы

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