Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2023, 18:58   #1
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию С++ Список, структуры, массив. Как просуммировать товары поступающие только из одинаковых стран

У меня условие следующее: дан массив, содержащий сведения об экспортируемых товарах: название товара, импортирующая товар страна, объем поставляемой партии (шт.). Составить массив стран, в которые экспортируется товар (наименование задает пользователь), и общий объем его экспорта.

Например:


Введите наименование товара для экспорта: чайник

Страны, в которые экспортируется товар:

из Китая в Россия - общий объем 1250
из Китая в Франция - общий объем 600
из Франция в Россия - общий объем 300



У меня не выходит сумма по странам, а выходит какая то непонятная. Подскажите как это исправить в программе.

Код:
#include <iostream>
#include <string>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i, v = 0, k = 0;
    char res[100];
    struct export_tovar // cоздаем структуру
    {
        char tovar[100]; // наименование товара
        char strana[100]; // название страны экспортёр
        int volume; // объем поставок партии, в шт.
        char importer[100]; // импортёр  
    };
 
    struct export_tovar a[] = // данная заполненная структура 
    {
        { "чайник", "Китай", 1000, "Россия"},
        { "чайник", "Китай", 100, "Франция"},
        { "чайник", "Китай", 500, "Франция"},
        { "чайник", "Китай", 250, "Россия"},
        { "чайник", "Франция", 300, "Россия"},
        { "кофеварка", "Франция", 500, "Польша"},
        { "кофеварка", "Франция", 400, "Россия"},
        { "кофеварка", "Япония", 100 ,"Россия"},
        { "пылесос", "Япония", 600, "Россия"},
        { "пылесос", "Япония", 500, "Франция"}
    };
    cout << "Введите наименование товара для экспорта:   ";
    cin >> res;
    cout << "\nСтраны, в которые экспортируется товар:\n " << endl;
    for (i = 0; i < 10; i++)
        if (!strcmp(a[i].tovar, res)) // сравнение строк a1[i].tovar и result
        {
             if (!strcmp(a[i].strana, a[i].strana)) 
             if (!strcmp(a[i].importer, a[i].importer))
            {
                k = k + a[i].volume;
            }
            cout << "Из " << a[i].strana << " в " << a[i].importer << " - " << "общий объем " << k << "\n";
            v++;
        }
    if (v == 0)
        cout << "Такого товара нет" << "\n";
        cout << "\n";
    system("pause");
    return 0;
}
lenaiv вне форума Ответить с цитированием
Старый 11.04.2023, 20:17   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Цитата:
Сообщение от lenaiv Посмотреть сообщение
Код:
if(!strcmp(a[i].strana, a[i].strana)) 
    if(!strcmp(a[i].importer, a[i].importer))
- строки бредовые, потому что сравнивать строку с самой собой всегда будет правда.
Cuprum5 вне форума Ответить с цитированием
Старый 11.04.2023, 20:19   #3
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

а как нужно, подскажите
lenaiv вне форума Ответить с цитированием
Старый 11.04.2023, 20:47   #4
lenaiv
Пользователь
 
Регистрация: 16.03.2023
Сообщений: 67
По умолчанию

исправила, все равно не идет
Код:
#include <iostream>
#include <string>
#include <Windows.h>

using namespace std;

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i, v = 0, k = 0;
    char res[100];
    struct export_tovar // cоздаем структуру
    {
        char tovar[100]; // наименование товара
        char strana[100]; // название страны экспортёр
        int volume; // объем поставок партии, в шт.
        char importer[100]; // импортёр  
    };

    struct export_tovar a[] = // данная заполненная структура 
    {
        { "чайник", "Китай", 1000, "Россия"},
        { "чайник", "Китай", 100, "Франция"},
        { "чайник", "Китай", 500, "Франция"},
        { "чайник", "Китай", 250, "Россия"},
        { "чайник", "Франция", 300, "Россия"},
        { "кофеварка", "Франция", 500, "Польша"},
        { "кофеварка", "Франция", 400, "Россия"},
        { "кофеварка", "Япония", 100 ,"Россия"},
        { "пылесос", "Япония", 600, "Россия"},
        { "пылесос", "Япония", 500, "Франция"}
    };
    cout << "Введите наименование товара для экспорта:   ";
    cin >> res;
    cout << "\nСтраны, в которые экспортируется товар:\n " << endl;
    for (i = 0; i < 10; i++)
        if (!strcmp(a[i].tovar, res)) // сравнение строк a1[i].tovar и result
        {
            for (i = 0; i < 10; i++)
            {
                if ((a[i].strana == a[i].strana) && (a[i].importer == a[i].importer))
                    k = k + a[i].volume;
            }
            cout << "Из " << a[i].strana << " в " << a[i].importer << " - " << "общий объем " << k << "\n";
            v++;
        }
     if (v == 0)
        cout << "Такого товара нет" << "\n";

    cout << "\n";
    system("pause");
    return 0;
}
lenaiv вне форума Ответить с цитированием
Старый 11.04.2023, 22:04   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Ну, уже прогресс: раньше одна строка сравнивалась сама с собой, а теперь - 2 !
Надо завести и заполнить массив строк - стран, и уж затем сравнивать каждую из них с полученной из структуры.
Код:
       if (!strcmp(a[i].tovar, res)) // сравнение строк a1[i].tovar и result
        {
            for j = 0; j < 10; j++)
            {
                if (a[i].strana == vse_strany[j])
                   {  k = k + a[i].volume; Break } ;
            }
            cout << "Из " << a[i].strana << " в " << a[i].importer << " - " << "общий объем " << k << "\n";
            v++;
        }

Последний раз редактировалось digitalis; 11.04.2023 в 22:19.
digitalis вне форума Ответить с цитированием
Старый 11.04.2023, 22:18   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Точно
macomics вне форума Ответить с цитированием
Старый 11.04.2023, 22:42   #7
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
Смущение

Код:
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;

struct
    NISHTAKI {
	char	Goods		[8];
	char	ExportCountry	[8];
	char	ImportCountry	[8];
	int   	Volume;
    }
    TotalList[12],
    a[] = {
	  { "Plates", 	"Chili",  	"Brasil",	100},
	  { "Plates", 	"China",  	"Brasil",	200},
	  { "Plates", 	"China",  	"Brasil",	300},
	  { "Plates", 	"China",  	"Brasil",	300},
	  { "Plates", 	"China",  	"Brasil",	300},
	  { "Plates", 	"China",  	"Chili",	400},
	  { "Plates", 	"Chili",	"Chili",	500},
	  { "Coffee",	"Brasil", 	"Chili",	600},
	  { "Coffee", 	"Chili", 	"Japan",	700},
	  { "Coffee", 	"Chili", 	"Japan",	700},
	  { "Coffee", 	"Chili", 	"Japan",	700},
	  { "Coffee", 	"Japan",  	"Brasil",	800},
	  { "Matches", 	"Japan", 	"China",	900},
	  { "Matches", 	"Japan", 	"China",	900},
	  { "Matches", 	"Japan", 	"China",	900},
	  { "Matches", 	"Japan", 	"Chili",	240},
	  { "Coffee",	"Brasil", 	"Chili",	160},
	  { "Coffee",	"Brasil", 	"Chili",	260}};

bool AddSome(NISHTAKI What, NISHTAKI Where[], int *Cnt){
	int i;
	for (i = 0; i < *Cnt; i++)
	  if ((strcmp(What.ExportCountry, Where[i].ExportCountry) == 0) &&
	      (strcmp(What.ImportCountry, Where[i].ImportCountry) == 0)) {
	       Where[i].Volume += What.Volume;
	       return false;
	  }

	strcpy(Where[i].Goods, What.Goods);
	strcpy(Where[i].ExportCountry, What.ExportCountry);
	strcpy(Where[i].ImportCountry, What.ImportCountry);
	Where[i].Volume = What.Volume;
	*Cnt = i + 1;
	return true;
}

void print(NISHTAKI N[], int Cnt){
	cout << "\nNo\tRes\tExport\tImport\tQtty\n\n";
	for (int i = 0; i < Cnt; i++)
	  cout	<< i+1 << "\t"
		<< N[i].Goods << "\t"
		<< N[i].ExportCountry << "\t"
		<< N[i].ImportCountry << "\t"
		<< N[i].Volume << endl;
}

int main(int argc, char* argv[]){
	char  Resource[8];
	int   Elements = sizeof(a) / sizeof(a[0]);
	int   NewListCount = 0;

	print(a, Elements);
	cout << "\n Enter resource: ";
	cin >> Resource;

	for (int i = 0; i < Elements; i++)
	  if (strcmp(Resource, a[i].Goods) == 0)
	    AddSome(a[i], TotalList, &NewListCount);

	print(TotalList, NewListCount);
	cout << "\n\nQuery completed." << endl;

int i;  cin >> i;
      return 0;
}
Без комментариев.
Изображения
Тип файла: jpg screenshot.1.jpg (84.0 Кб, 15 просмотров)
jillitil вне форума Ответить с цитированием
Старый 11.04.2023, 22:42   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Если без каких-либо допмассивов (для стран или флажков использования), то можно "смотреть" предыдущие записи:
Код:
    for (i = 0; i < 10; i++)
        if (!strcmp(a[i].tovar, res))
        {
            int ignore = 0;
            for (int j = 0; j < i; j++)
                if (!strcmp(a[j].tovar, res) &&
                    !strcmp(a[j].strana, a[i].strana) &&
                    !strcmp(a[j].importer, a[i].importer))
                {
                    ignore = 1;
                    break;
                }
            if (ignore)
                continue;
            int k = a[i].volume;
            for (int j = i + 1; j < 10; j++)
                if (!strcmp(a[j].tovar, res) &&
                    !strcmp(a[j].strana, a[i].strana) &&
                    !strcmp(a[j].importer, a[i].importer))
                    k += a[j].volume;
            cout << "Из " << a[i].strana << " в " << a[i].importer << " - " << "общий объем " << k << "\n";
            v++;
        }
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.04.2023 в 22:45.
BDA вне форума Ответить с цитированием
Старый 12.04.2023, 12:32   #9
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 736
По умолчанию

Код:
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
#define N 10

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int i, v = 0, k = 0, Size = 0, w;
    char res[100];
    string *Mas;
    bool Est;

    struct export_tovar   //cоздаем структуру
    {
        char tovar[100];  //наименование товара
        char strana[100]; //название страны экспортёр
        int volume;       // объем поставок партии, в шт.
        char importer[100];  //импортёр
    };

    struct export_tovar a[N] =  //данная заполненная структура
    {
        { "чайник", "Китай", 1000, "Россия"},
        { "чайник", "Китай", 100, "Франция"},
        { "чайник", "Китай", 500, "Франция"},
        { "чайник", "Китай", 250, "Россия"},
        { "чайник", "Франция", 300, "Россия"},
        { "кофеварка", "Франция", 500, "Польша"},
        { "кофеварка", "Франция", 400, "Россия"},
        { "кофеварка", "Япония", 100 ,"Россия"},
        { "пылесос", "Япония", 600, "Россия"},
        { "пылесос", "Япония", 500, "Франция"}
    };

    cout << "Введите наименование товара для экспорта: ";
    cin >> res;
    Mas = new string[N];

    cout << "\nСтраны, в которые экспортируется товар:\n";
    for(i = 0; i < N; i++)
        if(!strcmp(a[i].tovar, res))  //сравнение строк a[i].tovar и res
        {
             Est = false;
             for(w = 0; w < Size; w++)
                if(!strcmp(Mas[w].c_str(), a[i].importer))
                    Est = true;

             if(!Est)
             {
                 Mas[Size] = a[i].importer;
                 Size++;
                 k += a[i].volume;
             }
             v++;
        }
    cout << "Товар: " << res << " - общий объем " << k << "\n";
    cout << "Перечисление стран:\n";
    for(i = 0; i < Size; i++)
        cout << Mas[i] << '\n';

    if(v == 0)
        cout << "Такого товара нет.\n";


    delete[] Mas;
    system("pause");
    return 0;
}
Cuprum5 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel выбрать из столбца только числа и просуммировать отрицательные Фортуна777 Помощь студентам 1 01.06.2019 12:29
Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номе Alexar Makken Паскаль, Turbo Pascal, PascalABC.NET 1 23.12.2011 22:07
Товары в магазине двумерный массив Alexar Makken Помощь студентам 2 06.06.2011 16:28
Составить список стран, в которые экспортируется данный товар, и общий объем его экспорта - си - C++ kaizer131 Помощь студентам 0 21.02.2010 16:16
Как просуммировать список??? F_A_N_Alex Помощь студентам 8 02.10.2009 17:18