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

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

Восстановить пароль Регистрация
 
Brahmastra
 Аватар для Brahmastra
0 / 0 / 0
Регистрация: 01.08.2013
Сообщений: 8
23.09.2013, 13:14     Прата С. 6.6 #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
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++
Прата - составные типы C++
Прата -> Шлее = PROFIT? C++
Странная задача из Прата 2011 C++
C++ Ошибка в коде(С.Прата)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
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
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2013, 13:38     Прата С. 6.6 #3
При таком условии в for():
C++
1
naim[i].sum >= 10000, i < k;
будет учитываться только то, что после запятой.
Brahmastra
 Аватар для 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
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
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
 Аватар для 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
Ответ Создать тему
Опции темы

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