Просьба оценить код и дать советы.

Просьба оценить код и дать советы.

Объявить переменные с помощью которых можно будет посчитать общую сумму покупки нескольких товаров. Например плитки шоколада, кофе и пакеты молока.
Какие плохие и хорошие стороны есть в моем решении. Новичок,сильно не бить. (Строки не на русском потому что писал в Dev`e,не дома).

#include <iostream>
#include <cstdlib>

using std::cout;
using std::cin;
using std::endl;

//------------------------------------------------------------------------------------
//Объявление глобальных переменных
//------------------------------------------------------------------------------------
int choko = 0;
int coffee = 0;
int milk = 0;
int tov = 0;
float sumch = 0;
float sumcof = 0;
float summilk = 0;
float sttov = 0;

//------------------------------------------------------------------------------------
//Прототипы функций
//------------------------------------------------------------------------------------
int tovari();
float stoimost();
float summa();

int main()
{

    tovari();
    stoimost();
    summa();

    system("PAUSE");
    return 0;

}

//------------------------------------------------------------------------------------
// Функция ввода и подсчета товаров
//------------------------------------------------------------------------------------
int tovari()
{

    cout << "----------------------" << "\n";

    cout << "Vvedite kol - vo kuplennix productov \n";
    cout << "----------------------" << "\n";

    cout << "Plitok shokolada = ";
    cin >> choko;
    cout << "Banok cofe = ";
    cin >> coffee;
    cout << "Paketov moloka = ";
    cin >> milk;

    tov = choko + coffee + milk;

    cout << "----------------------" << "\n";
    cout << "Obshee kol - vo kuplennix tovarov = " << tov << "\n";
    cout << "----------------------" << "\n";

    return 0;

}

//------------------------------------------------------------------------------------
// Функция ввода стоимости каждого вида товаров
//------------------------------------------------------------------------------------
float stoimost()
{

    cout << "----------------------" << "\n";

    cout << "Vvedite stoimost kuplennix productov \n";
    cout << "----------------------" << "\n";

    cout << "Plitok shokolada = ";
    cin >> sumch;
    cout << "Banok cofe = ";
    cin >> sumcof;
    cout << "Paketov moloka = ";
    cin >> summilk;

    return 0;

}

//------------------------------------------------------------------------------------
// Функция подсчета общей стоимости каждого вида товаров и общей стоимости товаров
//------------------------------------------------------------------------------------
float summa()
{
    cout << "----------------------" << "\n";
    cout << "Stoimost pokupok \n";
    cout << "----------------------" << "\n";

    cout << "----------------------" << "\n";
    sumch *= choko;
    cout << "Stoimost plitok shokolada = " << sumch << "\n";
    sumcof *= coffee;
    cout << "Stoimost banok cofe = " << sumcof << "\n";
    summilk *= milk;
    cout << "Stoimost paketov moloka = " << summilk << "\n";
    cout << "----------------------" << "\n";
    sttov = sumch + sumcof + summilk;
    cout << "Obshya summa k oplate = " << sttov << "\n";
    cout << "----------------------" << "\n";

    return 0;
}

Какие плохие

1) Лучше кривой английский, чем транслит. Это касается не только строковых литералов, но и идентификаторов («имен» функций, переменных).

2) Какой смысл от того, что Ваши функции возвращают значения, если ничего не используется (как в вызываемом, так и в вызывающем коде).

3) Нафига глобальные данные здесь нужны, решите задачу без них.

На первое время хватит.

Пару слов в защиту Ignis. Похоже, это самые первые шаги в изучении языка. Поэтому пока (!) прокатит )) Хотя с замечаниями Croessmah вполне согласен.

Мне еще очень не понравилось использование одних и тех же переменных как для стоимости единицы товара, так и для суммы стоимости нескольких единиц товара. Это плохая практика. А учитывая, что это все глобальные переменные — вдвойне плохо.

Цена и сумма должны быть, наверное, типа double.

Функции должны быть логически необходимыми. В данном случае, если весь код свалить в main без всяких функций — ничего, по сути, не изменится. При разбиении программы на функции, ты руководствовался неправильной предпосылкой: этап ввода количества товаров, этап ввода стоимости и этап подсчета. А если товаров сегодня 3, завтра 4, а послезавтра 12? Как быть? Каждый раз переписывать программу?

Твоя программа должна работать как кассовый аппарат в магазине: по каждому товару ввод названия, цены и количества, вывод суммы по товару; а в конце вывод итога: общее количество единиц всех товаров и общая сумма покупки. При таком рассуждении вырисовывается функция, которая каким-то образом (например, запрашивает у пользователя) получает все входные данные по покупке, а возвращает полученные данные и сумму по товару. Вызывающему коду остается только суммировать общее количество товаров и общую сумму. При таком подходе легко написать программу, которая может обрабатывать произвольное количество покупок и/или получать часть данных о покупке (например, цену) из базы данных.

Однако, есть проблема: функция может возвращать только одно значение. Решений несколько:

  1. Передавать в функцию указатели для возможности изменять переменные в вызывающем коде.
  2. Передавать в функцию ссылки для возможности изменять переменные в вызывающем коде.
  3. Возвращать структуру.

Например, так:

// 1
void purchase(string *name, double *price, int *qty, double *sum) { ... }

// 2
void purchase(string &name, double &price, int &qty, double &sum) { ... }

// 3
struct SPurchase 
{
    string name;
    double price;
    int qty;
    double sum;
};

SPurchase purchase() { SPurchase p; ...; return p; }

(Третий способ, на мой взгляд, самый правильный: функция должна возвращать значение, а не изменять свои аргументы. Хотя бывает, что без этого не обойдешься.)

Или, следуя правилам ООП, вообще отказаться от функции, а сделать и товар, и покупку классами и все телодвижения упаковать в методы )))

Строки не на русском потому что писал в Dev`e,не дома

Отмаз дешевый. Не принимается.
Читай здесь.

может кто помочь с этим
[AsmLoader] 'SerbRogueSubtlety.cs' could not be compiled. Compiler Errors:
ожидалась { Line: 7 (SerbRogueSubtlety.cs.cs)
ожидалась { Line: 11 (SerbRogueSubtlety.cs.cs)
Недопустимый токен «.» в объявлении класса, структуры или интерфейса Line: 11 (SerbRogueSubtlety.cs.cs)
Недопустимый токен «[» в объявлении класса, структуры или интерфейса Line: 15 (SerbRogueSubtlety.cs.cs)
Методы должны содержать тип возвращаемого значения Line: 29 (SerbRogueSubtlety.cs.cs)
это код где нада исправить:

namespace ReBot

    [Rotation ("SC Subtlety Rogue", "Serb", WoWClass.Rogue, Specialization.RogueSubtlety, 5, 25)]

    public class SerbRogueSubtlety.cs.cs

макс, я не спец по C#... но может то, что после namespace ReBot, должно быть заключено в фигурные скобки? И имя класса, оканчивающееся на .cs.cs, внушает некоторые подозрения. Почитай спецификацию языка.

По последней ошибке: видимо в определении метода ты не указал тип возвращаемого значения. Опять-таки см. доку по языку.

помогите составить блок схему

// Дана последовательность целых чисел а1, а2,..., ап. Выяснить, какое число встречается раньше — положительное или отрицательное.
#include <iostream>

using namespace std;

const int N = 10; // сколько будет чисел в последовательности

int main(int argc, char** argv) {

    int A[N] = {0, 115, -20, 11, 2, -5, 8, 11, 1, -5}; // зададим последовательность
    for (int k = 0; k < N; k++) { // проходим от начала до конца последовательности
        if (A[k] > 0) // проверяем на > 0
        {
            cout << "Положительное раньше!" << endl;
            return 0; // выходим
        }
        else
         if (A[k] < 0) // проверяем на < 0
         {
            cout << "Отрицательное раньше!" << endl;
            return 0;  // выходим
         }
    }

    cout << "Все нули!" << endl; // если дошли до этого места - все нули.

    return 0;
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.