Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
1

Для каждого времени года вывести расход, а затем - общую сумму расхода

30.08.2014, 17:03. Просмотров 619. Ответов 12
Метки нет (Все метки)

как написать правильно?

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
#include <iostream>
using namespace std;
const int Seasons = 4;
const char* Snames[Seasons] =
    {"Spring", "Summer", "Fall", "Winter"};
 
void fill(double* pa[], int Seasons);
void show(double da[], int Seasons);
int main()
{
    double expenses[Seasons];
    fill(&expenses, Seasons);
    show(expenses, Seasons);
  
    return 0;
}
 
void fill(double* pa[], int Seasons)
{
    for (int i = 0; i < Seasons; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: "; // ввод расходов по временам года
        cin >> (*pa)[i];
    }
}
 
void show(double da[], int Seasons)
{
    double total = 0.0;
    cout << "\nEXPENSES\n";                           // вывод расходов по временам года
    for (int i = 0; i < Seasons; i++)
    {
        cout << Snames[i] << ": $" << da[i] << '\n';
        total += da[i];
    }
    cout << "Total: $" << total << '\n';               // вывод общей суммы расходов
}
Помогите исправить код
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2014, 17:03
Ответы с готовыми решениями:

Вывести на экран для каждого наименования товара общую сумму заплаченных денег
Pascal ABC Тема Записи Файл содержит информацию: название товара, приобретённое количество,...

По названию времени года выдавать названия месяцев сезона, для каждого месяца количество дней
Необходимо написать программу, которая по названию времени года будет выдавать названия месяцев...

Найти общую сумму покупки для N товаров, вводится N, количество и стоимость каждого из них
Доброго времени суток! :) Попалась интересная задачка на цикли, которую нужно решить с помощью MVS...

Выбрать общую сумму заказов за каждый день 1989 года
SELECT AMOUNT, ORDER_DATE FROM orders WHERE year(ORDER_DATE)=1989 Выбрать за 1989 год у меня...

12
62 / 62 / 15
Регистрация: 20.08.2014
Сообщений: 593
30.08.2014, 17:04 2
QzzQ, а задача какая стоит? Что не работает?
0
2395 / 1800 / 393
Регистрация: 15.12.2013
Сообщений: 7,693
30.08.2014, 17:09 3
QzzQ, из 12 строки & убирайте.
в 7 и в 18,убирайте звездочку.
в 23 обращайтесь как к массиву,если в указателях разбираетесь не очень хорошо,лучше их использование минимизировать.
0
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
30.08.2014, 17:17  [ТС] 4
Нужно для каждого времени года вывести расход и за тем общую сумму расхода используя массив const char* для строковых представлений времен года и массив double для расходов.

Добавлено через 2 минуты
Цитата Сообщение от S_el Посмотреть сообщение
если в указателях разбираетесь не очень хорошо,лучше их использование минимизировать
я как раз сейчас пытаюсь разобраться с указателями
0
2395 / 1800 / 393
Регистрация: 15.12.2013
Сообщений: 7,693
30.08.2014, 17:18 5
Цитата Сообщение от QzzQ Посмотреть сообщение
я как раз сейчас пытаюсь разобраться с указателями
рекомендую:
Прата С. - Язык программирования С++. Лекции и упражнения
Язык программирования С++. Вводный курс. 4-е изд. (Стенли Липпман)
1
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
30.08.2014, 17:21  [ТС] 6
Цитата Сообщение от S_el Посмотреть сообщение
рекомендую:
Прата С. - Язык программирования С++. Лекции и упражнения
Язык программирования С++. Вводный курс. 4-е изд. (Стенли Липпман)
Спасибо за совет
0
Модератор
Эксперт С++
10150 / 8499 / 5165
Регистрация: 18.12.2011
Сообщений: 22,738
30.08.2014, 18:00 7
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
#include <iostream>
using namespace std;
 
const int Seasons = 4;
const char* Snames[Seasons] =
        {"Spring", "Summer", "Fall", "Winter"};
void fill(double* pa,int n);
void show(double* da,int n);
int main()
{
    double expenses[Seasons];
    fill(expenses, Seasons);
    show(expenses, Seasons);
    system("pause");       
    return 0;
}
 
void fill(double* pa, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: "; // ввод расходов по временам года
        cin >> pa[i];
    }
}
 
void show(double* da, int n)
{
    double total = 0.0;
    cout << "\nEXPENSES\n";                           // вывод расходов по временам года
    for (int i = 0; i < n; i++)
    {
        cout << Snames[i] << ": $" << da[i] << '\n';
        total += da[i];
    }
    cout << "Total: $" << total << '\n';               // вывод общей суммы расходов
}
1
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
30.08.2014, 21:46  [ТС] 8
как написать правильно?

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
#include <iostream>
using namespace std;
const int Seasons = 4;
const char* Snames[Seasons] =
    {"Spring", "Summer", "Fall", "Winter"};
struct ex 
{
    double pa[];
    double da[];
};
 
void fill(struct pa, int n);
void show(struct da, int n);
int main()
{
    ex expenses[Seasons];
    fill(expenses, Seasons);
    show(expenses, Seasons);
 
    return 0;
}
 
void fill(struct pa, int n)
{
    for (int i = 0; i < Seasons; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: "; // ввод расходов по временам года
        cin >> ex.pa[i];
    }
}
 
void show(struct da, int n)
{
    double total = 0.0;
    cout << "\nEXPENSES\n";                           // вывод расходов по временам года
    for (int i = 0; i < Seasons; i++)
    {
        cout << Snames[i] << ": $" << ex.da[i] << '\n';
        total += ex.da[i];
    }
    cout << "Total: $" << total << '\n';               // вывод общей суммы расходов
}
Помогите исправить и разобраться.
По условию задачи нужно вывести расход по временам года и за тем общий. Используя массив из const char* для представлений времен года и структуру, единственный член которой является обычным массивом из double для расходов.
0
34 / 34 / 8
Регистрация: 06.04.2014
Сообщений: 189
30.08.2014, 22:21 9
C++
1
2
3
4
5
struct ex 
{
    double pa[];
    double da[];
};
Что вы пытались сделать?

Добавлено через 2 минуты
Цитата Сообщение от QzzQ Посмотреть сообщение
единственный член которой
А у вас два члена(массива) с нулевыми размерами

Чтобы ваш код было легче понять, давайте всем сущностям(переменные, методы, функции и т.д.) осмысленные имена, которые отражали бы их назначение.
0
40 / 40 / 17
Регистрация: 04.02.2014
Сообщений: 144
30.08.2014, 22:49 10
Вот это неправильно:
C++
1
void fill(struct pa, int n)
Создавая структуру с определенным именем, Вы объявляете свой тип данных, т.е. в функцию нужно передавать объекты этого типа. В Вашем случае:
C++
1
void fill(ex pa, int n)
Это же относится и к другим функциям.
0
0 / 0 / 0
Регистрация: 24.07.2014
Сообщений: 22
30.08.2014, 23:24  [ТС] 11
Что у меня не правильно?

Добавлено через 7 минут
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
#include <iostream>
using namespace std;
const int Seasons = 4;
const char* Snames[Seasons] =
    {"Spring", "Summer", "Fall", "Winter"};
    
struct expense 
{
    double pa[Seasons];
};
 
void fill(expense pa, int n);
void show(expense pa, int n);
int main()
{
    expense expenses_for_year[Seasons];
    fill(expenses_for_year, Seasons);
    show(expenses_for_year, Seasons);
 
    return 0;
}
 
void fill(expense pa, int n)
{
    for (int i = 0; i < Seasons; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: "; // ввод расходов по временам года
        cin >> expense.pa[i];
    }
}
 
void show(expense pa, int n)
{
    double total = 0.0;
    cout << "\nEXPENSES\n";                             // вывод расходов по временам года
    for (int i = 0; i < Seasons; i++)
    {
        cout << Snames[i] << ": $" << expense.pa[i] << '\n';
        total += expense.pa[i];
    }
    cout << "Total: $" << total << '\n';                // вывод общей суммы расходов
}
Нужно наверное как то изменить аргументы в вызове функций
0
2395 / 1800 / 393
Регистрация: 15.12.2013
Сообщений: 7,693
30.08.2014, 23:42 12
Цитата Сообщение от QzzQ Посмотреть сообщение
Что у меня не правильно?
Не правильный подход.
Вместо что не правильно,надо спрашивать почему не правильно?
Вот вы привели кусок кода аж в 42 строчки,попытались скормить компилятору,но он почему-то кушать не захотел.И вы сразу(или почти сразу) пошли на форум за готовым результатом.С таким подходом за вашим авторством скоро будет создано еще полсотни типовых тем и ни одного поста,полезного для другого человека.
Компилятор выдает ошибку с указанием строки,надо перейти к этой строке и поискать ошибку,скорей всего она синтаксическая и исправляется легко.И так продолжать пока компилятор не одобрит ваш код.Ну а затем тестировать программу и разбираться почему так,а не иначе.
Не надо пытаться взять C++ нахрапом,это практически невозможно и уж тем более невозможно добиться хорошего результата без практики.Только не в количестве набранных символов,а различных тематических задач с использованием различных возможностей такого богатого языка как C++.
Начните с задачи и выполняйте её по этап.
Требуется получить данные -> прекрасно,пишите функцию.
Но перед этим следует провести подготовительную работу,определить какие данные будут получены,где их следует хранить( в вашем случае структура),какие функции стоит написать,какие переменные и какого типа будут использоваться,как их назвать,чтобы не запутаться.
Ввели данные?Проверьте корректность ввода,либо отладчиком либо выводом на консоль.
И так далее пока задача не будет покарена.
Встретили трудности?Поищите другой способ решения.

Добавлено через 1 минуту
QzzQ, что по-вашему вы делаете в 16 строчке?
2
Модератор
Эксперт С++
10150 / 8499 / 5165
Регистрация: 18.12.2011
Сообщений: 22,738
31.08.2014, 11:09 13
Цитата Сообщение от QzzQ Посмотреть сообщение
void fill(expense pa, int n)
Параметр pa передаете по значению.
Т.е. при вызове функции передаете копию фактического параметра.
А какой Вам прок от изменения этой копии. Все равно она при возврате из функции удалится.
Поэтому передавайте адрес
C++
1
2
3
4
5
6
7
8
void fill(expense* e, int n)
{
    for (int i = 0; i < Seasons; i++)
    {
        cout << "Enter " << Snames[i] << " expenses: "; // ввод расходов по временам года
        cin >> e->pa[i];
    }
}
В функцию show можете, конечно, передавать значение.
Но учтите, что происходит копирование параметра. Если массив большой, то тратится время и память!
Ну и main с учетом замечаний:
C++
1
2
3
4
5
6
7
8
int main()
{
    expense expenses_for_year; // содаем ОДИН экземпляр, содержащий массив.
    fill(&expenses_for_year, Seasons); // Передаем адрес
    show(expenses_for_year, Seasons);
 
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2014, 11:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Считает сумму цифр на местах, начиная с первого, затем для каждого третьего после него
Коле нравится смотреть на числа. Он часами может глядеть на оценки в своём дневнике, потому что...

Посчитать сумму цифр на местах, начиная с первого, затем для каждого третьего после него
Коле нравится смотреть на числа. Он часами может глядеть на оценки в своём дневнике, потому что он...

Водится номер года. Вывести число первого понедельника для каждого месяца
Водится номер года. Вывести число первого понедельника для каждого месяца. Добавлено через 13...

Напишите программу, которая запрашивает у пользователя номер месяца и затем выводит соответствующее название времени года
Напишите программу, которая запрашивает у пользователя номер месяца и затем выводит соответствующее...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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