Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/12: Рейтинг темы: голосов - 12, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 14.10.2008
Сообщений: 11
1

Помогите разобраться со структурами

09.11.2008, 17:19. Показов 2328. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех! Мне дали очередное задание с которым, конешноже я не могу самостоятельно справиться и именно поэтому вновь прошу вашей помощи . Вот задание:
В первом текставом файле (eda.txt) записаны рецепты приготовления разных блюд.
Рецепт состоит из нескольких строк, первая это название блюда, следующие стоки это список ингредиентов (название ингредиента и нужное количество), описание сомого приготовления это пустая строка. Во втором фаиле (recept.txt) список возможных ингредиентов и их цены. В третьем файле (zakaz.txt) список заказов: в первой строке имя и фамилия заказчика, в следующих список заказаных продуктов и в каком количестве. Данные о заказчиках отделены пустой строкой.
Создайте программу которая в отдельном файле будет записывать счет для каждого заказчика. В документе должно буть: имя, фамилия заказчика, а также ценник заказаных блюд: название блюда, его количество, цена одной порции, общая сумма, в конце списка должна быть общая сумма за весь заказ. При этом цена одной порции это сумма стоимости ингридиентов, нужных для приготовления этого блюда, и и еще 15% от этой стоимости.
Вот такое, длинное и непонятное задание. Помогите с ним справиться, пожалуйста.

Добавлено через 7 минут 20 секунд
Я застряла на самом начале, помогите понять что нитак.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h> 
#include <string.h> 
#include <fstream>
 
int main() 
{ 
ifstream ola ("eda.txt");
ifstream ela ("recept.txt"); 
ifstream ala ("zakaz.txt");
 
struct vaistai { char imja [10]; 
char familija [10];
char bliudo [10];
int kolporc; 
float cenaingred; 
float cenabliuda; 
}; 
 
system("pause");
return 0;
}
Компелятор это не пропускает и я непонимаю почему. Что нитак?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2008, 17:19
Ответы с готовыми решениями:

Помогите со структурами (дописать программу)
Структуры вводятся с клавиатуры. В ряде вариантов заданий с клавиатуры вводится не вся структура,...

If else помогите разобраться
Доброго времени суток всем. Не так давно начали программировать в C++ MS Visual Studio 2010? и...

Помогите разобраться
У меня есть координаты North,West,East,South. Мне нужно отобразить их на осях ОХ и ОУ. Допустим я...

Помогите разобраться в обозначениях
Си++ изучал давно, а сейчас потребовалось все срочно вспомнить... Так вот помогите разобраться в...

18
296 / 56 / 5
Регистрация: 22.05.2008
Сообщений: 788
09.11.2008, 17:22 2
А ошибку слабо скопипастить?
0
50 / 49 / 15
Регистрация: 17.09.2008
Сообщений: 98
10.11.2008, 11:49 3
Добавь
Код
using namespace std;
после инклудов
0
0 / 0 / 0
Регистрация: 14.10.2008
Сообщений: 11
10.11.2008, 22:48  [ТС] 4
спасибо, глупая ошибка... но еще есть проблемы. вот что выбивает:
1 C:\Dev-Cpp\include\c++\3.4.2\backward\iostream.h:31, from C:\Documents and Settings\Dmitrij\Рабочий стол\3 praca domowa\strukturos.cpp In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31, from C:\Documents and Settings\Dmitrij\Рабочий стол\3 praca domowa\strukturos.cpp
1 C:\Documents and Settings\Dmitrij\Рабочий стол\3 praca domowa\strukturos.cpp from C:\Documents and Settings\Dmitrij\Рабочий стол\3 praca domowa\strukturos.cpp
32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
0
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
11.11.2008, 08:28 5
можно спросить а зачем в перед main стоит int ,разве не void должен быть ? и как по мне структуру можно зделать глобальную , так красивее =)
0
50 / 49 / 15
Регистрация: 17.09.2008
Сообщений: 98
11.11.2008, 10:25 6
ola312, попробуй заменить
Код
#include <iostream.h> 
#include <string.h>
на
Код
#include <iostream> 
#include <string>
Casper!,
а зачем в перед main стоит int ,разве не void должен быть ?
Не должен. По стандарту пункт 3.6.1[2]
-2- An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a return type of type int, but otherwise its type is implementation-defined.
У Страуструпа в "Bjarne Stroustrup's C++ Style and Technique FAQ"(http://www.research.att.com/~b... #void-main):
The int returned by main() is a way for a program to return a value to "the system" that invokes it. On systems that doesn't provide such a facility the return value is ignored, but that doesn't make "void main()" legal C++ or legal C. Even if your compiler accepts "void main()" avoid it, or risk being considered ignorant by C and C++ programmers.
0
15 / 14 / 2
Регистрация: 02.09.2008
Сообщений: 168
11.11.2008, 12:47 7
незнаю что за стондарт но Visual C++ нас учат void main(){} это сам код программы
0
Супер-модератор
8783 / 2536 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
11.11.2008, 13:00 8
Casper!, да тут еще и от компилятора все зависит...
0
50 / 49 / 15
Регистрация: 17.09.2008
Сообщений: 98
11.11.2008, 13:58 9
незнаю что за стондарт
Это международный стандарт языка Си++ISO/IEC 14882
но Visual C++ нас учат void main(){} это сам код программы
Не знаю, кто вас учит, но думаю Бьёрн Страуструп, который разработал язык C++, немного в нём разбирается Main() всего-лишь функция, которая определяет начало программы и по стандарту возвращает 0, если всё прошло успешно.
0
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
12.11.2008, 10:10 10
Цитата Сообщение от Casper! Посмотреть сообщение
незнаю что за стондарт но Visual C++ нас учат void main(){} это сам код программы
Ну так пускай идут и читают стандарт, неучи .. =)
0
31 / 31 / 8
Регистрация: 05.11.2008
Сообщений: 162
12.11.2008, 10:14 11
Стандарт, или нестандарт - ето все правила хорошего тона. Я считаю программист должен писать так, чтобы был баланс между быстродействием и занимаемой памятью. А как ето реализовать ето уже неважно, хоть void, хоть float...
0
0 / 0 / 0
Регистрация: 14.10.2008
Сообщений: 11
12.11.2008, 21:29  [ТС] 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
#include <iostream> 
#include <string>
#include <fstream>
 
using namespace std;
 
int main() 
{ 
ifstream ola ("eda.txt");
ifstream ela ("recept.txt"); 
ifstream ala ("zakaz.txt");
 
struct vaistai { char imja [10]; 
char familija [10];
char bliudo [10];
int kolporcyj; 
float cenaingrid; 
float cenabliuda; 
}; 
 
system("pause");
return 0;
}
Что делать дальше? Помогите составить алгоритм, а то я знаю что надо зделать, но не очень понимаю как...
0
50 / 49 / 15
Регистрация: 17.09.2008
Сообщений: 98
13.11.2008, 10:55 13
Что делать дальше? Помогите составить алгоритм, а то я знаю что надо зделать, но не очень понимаю как...
Одной структурой не обойдёшься, да и вообще, даже не представляю, как эту задачу можно решить только структурами - имхо нужны ещё и списки или (если можно использовать STL) контейнеры map. Тогда:
1. заполняешь из файла ингридиенты список из
Код
struct Ингридиент {
название
цена
}
2. из файла блюда - список из
Код
struct Блюдо {
название
список struct Ингридиент_в_блюде {название, цена}
описание приготовления
}
3. из файла заказы - список из
Код
struct Заказ {
имя,
фамилия,
список struct Блюдо_в_заказе {название, количество}
данные о заказчике
}
Далее создаёшь
Код
struct Счёт {
имя,
фамилия,
список struct Блюда_в_заказе {название, количество,цена 1 порции,общая цена}
общая сумма за заказ
}
Дальше просматриваешь все заказы, из каждого заказа берёшь фио заказчика (записываешь в структуру счёт) и просматриваешь в заказе список блюд.
Для каждого блюда - берёшь название блюда (записываень в Блюда_в_заказе.название) и просматриваешь список ингридиентов.
Для каждого ингридиента берёшь его цену из struct Ингридиент и умножаешь на количество ингридиентов в блюде.
Просмотрев все ингридиенты в блюде - суммируешь стоимость ингридиентов и умножаешь на 0.15- получаешь цену за 1 порцию. Заносишь в Блюда_в_заказе.цена 1 порции
Умножаешь цену за 1 порцию на Блюда_в_заказе.количество получаешь Блюда_в_заказе.общая цена
Просмотрев все блюда в заказе суммируешь общие цены - получаешь Счёт.общая сумма за заказ
смотришь следующий заказ....

В-общем как-то так. Надеюсь не слишком запутанно Если не понятно - просто на бумаге распиши все структуры, что куда записывается и что на что умножается. Задачи в-принципе не сложная, но писанИны будет много.
1
0 / 0 / 0
Регистрация: 14.10.2008
Сообщений: 11
17.11.2008, 23:57  [ТС] 14
gde tut osibka?
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream.h> 
#include <string.h> 
#include <fstream>
 
using namespace std;
const int CKiek = 30;
const int Ck   = 50;
int n;
 
    struct TPirkinys {
           char pav[Ck];
           double kai;
           int kie;
           double sum;
           };
int main() 
{ 
TPirkinys A[CKiek];
int n;
void mama
{
     bool Yra;
     Yra=Duomenys("eda.txt");
     if(Yra)
     {
            Pinigai();
            Spausdinti("lll.txt");
     }
}
 
   
  void Duomenys(char eda[]);
    {
         ifstream fd("eda.txt");
         if(fd.fail()) return false;
         n = 0;
         while(!fd.fail() && (n < CKiek))
                          {
                          fd.get(A[n].pav, Ck);
                          fd>>A[n].kai>>A[n].kie;
                          fd.ignore();
                          A[n].sum = A[n].kai * A[n].kie;
                          if(!fd.fail()) n = n+1;
                          }
                          fd.close();
                          return true;
                          }
   void Spausdinti(char lll[])
   {
         ofstream fr("lll.txt");
         fr <<"----------------------\n";
         fr <<"MOKEJIMAI\n";
         for(int i=0; i<n; i++)
         fr <<A[i].pav<< " "<<A[i].sum<<" Lt\n";
         fr <<"----------------------\n";
         fr <<"Studentas sumokejo:"<<suma<< " Lt\n");
         }
         
    void Pinigai()
    {
         suma=0;
         for(int i=0; i<n; i++)
         suma = suma + A[i].sum;
         }
                          
system("pause");
return 0;
}
vot shto vybrasyvajet:
23 G:\3 praca domowa\strukturos.cpp expected primary-expression before "void"
23 G:\3 praca domowa\strukturos.cpp expected `;' before "void"
53 G:\3 praca domowa\strukturos.cpp a function-definition is not allowed here before '{' token
53 G:\3 praca domowa\strukturos.cpp expected `,' or `;' before '{' token
63 G:\3 praca domowa\strukturos.cpp expected primary-expression before "void"
63 G:\3 praca domowa\strukturos.cpp expected `;' before "void"
0
0 / 0 / 0
Регистрация: 10.11.2008
Сообщений: 26
18.11.2008, 19:24 15
Подскажите, как вводить структурированные данные. Вот исходник (спс casper'у), но что-то я не пойму как этот код запустить. У меня ошибки выдаёт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct Data{
    int day;
    int mondey;
    int yers;
};
void main()
{
Data a={15,10,2008};
cout<<a[i].a.day<<'.';
cout<<a[i].a.mondey<<'.';
cout<<a[i].a.yers<<'\n';
}
Добавлено через 1 час 13 минут 56 секунд
Вот написал, код вроде правильный, а всё равно выдаёт ошибку. В чём может быть дело?
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
#include <stdio.h>
#include <conio.h>
#define num 5
 
struct AVTO {
    char Name[100];
    char Collor[50];
    int Year_make;
};
 
void main {
    struct AVTO machine[num];
    int i;
 
    for (i=0; i<num; i++)
    {
        printf("Input model avto: ");
        scanf("%s",&machine[i].Name);
        
        printf("Input collor avto: ");
        scanf("%s",&machine[i].Collor);
 
        printf("Input year make: ");
        scanf("%d",&machine[i].Year_make);
    }
    getch();
}
0
50 / 49 / 15
Регистрация: 17.09.2008
Сообщений: 98
19.11.2008, 10:28 16
после main скобки поставь.
0
0 / 0 / 0
Регистрация: 14.10.2008
Сообщений: 11
23.11.2008, 13:57  [ТС] 17
Очень прошу посмотрите что тут не так, а то сроки поджимают, а я никак немогу побороть свою тупость и справится с этой задачей.

вот файл "uzsakymai.txt":
Tadas Tadaitis
"Uralo" 9
kepsnys 8
salotos 4

А вот моя програмка, она должна из файла "uzsakymai.txt" брать певую строку, потом другую информацию.
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
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdio.h>
 
using namespace std;
 
const int Ck=30;
const int Ce=30;
const int Cm=10;
 
int main()
{
    struct uzsakymai {char имя_фамилия[Ck];
                      char название_блюда[Ck];
                      int количество_блюд; 
                    };    
 
    struct uzsakymai S[n];
    int n;
 
    ifstream fin ("zaliavos.txt");
    if(!fin) 
    cout<<"файл не найден"<<endl;
    n=0;
    while(!fin.eof() ) {
                    fin.get(S[n].имя_фамилия, sizeof S[n].имя_фамилия);
                    fin>>S[n].название_блюда>>S[n].количество_блюд;
                    fin.ignore();
                    n++;
                    }
                    fin.close();               
  
ofstream fu ("saskaita.txt");
for (int i=0; i<n; i++)
      fu<<S[i].имя_фамилия;
      fu<<"______________________________________________________\n";
        {
        fu<<S[i].название_блюда<<"|"<<S[i].количество_блюд;
        fu<<"\n______________________________________________________\n";
        }          
     
system("PAUSE");
return 0;
}
тут чтото не то, так как програмка ничего не делает. помогите, подскожите в чем дело...
0
50 / 49 / 15
Регистрация: 17.09.2008
Сообщений: 98
24.11.2008, 10:10 18
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
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <stdio.h>
 
using namespace std;
 
const int Ck = 30;
const int Ce = 30;
const int Cm = 10;
 
int main() {
    struct uzsakymai {
        char имя_фамилия[Ck];
        char название_блюда[Ck];
        int количество_блюд;
    };
 
    struct uzsakymai S[5];
    int n = 0;
 
    ifstream fin("uzsakymai.txt");
    if (!fin) {
        cout << "файл не найден" << endl;
    }
    while (!fin.eof()) {
        fin.get(S[n].имя_фамилия, sizeof S[n].имя_фамилия);
        fin >> S[n].название_блюда >> S[n].количество_блюд;
        fin.ignore();
        n++;
    }
    fin.close();
 
    ofstream fu("saskaita.txt");
    for (int i = 0; i < n; i++) {
        fu << S[i].имя_фамилия << endl;
        fu << "_____________________________________________ _________\n";
        fu << S[i].название_блюда << "|" << S[i].количество_блюд;
        fu << "\n___________________________________________ ___________\n";
        }
 
    system("PAUSE");
    return 0;
}
0
0 / 0 / 0
Регистрация: 14.10.2008
Сообщений: 11
04.12.2008, 20:04  [ТС] 19
Вот у меня такая проблема: как я уже писала выше я имею файл "uzsakymai.txt":
Tadas Tadaitis
cifran 1000
sinupret 200
ibumetin 5000
и мне както надо записать содержимое файла в массив. Вот программа:
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
48
49
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#define MAX 15
#define MAks 10
using namespace std;
 
int main()
                                       
struct uzsakymai {
           char vard_pav[MAX];
           char prod_vard [MAX];
           int prod_kiekis;
           };
   uzsakymai P[100];
    int r;
    char b[MAX];
    ifstream ola ("uzsakymai.txt");
    if(!ola) 
    cout<<"failas neatsidare"<<endl;
    r=0;
    int m=0;
    while(!ola.eof() ) {
                    ola.get(P[r].vard_pav, MAX);
                    {
                    strcpy(P[r].vard_pav,P[m].vard_pav);
                    ola>>P[m].prod_vard;
                    ola>>P[m].prod_kiekis;
                    ola.ignore();
                    m++;
                    r++;
                    }
                    ola.close();
   
   ofstream fu("saskaita.txt");
   int p=0;
   int n=100;
   for(int p=0; p<n; p++)
   fu<<P[p].vard_pav<<endl;
   fu<<P[p].prod_vard<<endl;
   fu<<P[p].prod_kiekis<<endl;
 
   fu.close();
                  
    system("PAUSE");
    return EXIT_SUCCESS;
}
в один массив это записать не выходит, поэтому я создаю второй. Значит в первый идет P[r].vard_pav, а во второй P[p].prod_vard и P[p].prod_kiekis, пока не будет пустой строки все записывается во второй масив, после пустой строки эта процедура должна повтарятся.
Помогите поправить програму, пожалуйста.

Добавлено через 3 минуты 27 секунд
немного плохо файл написала. Вот как он должен выгледеть:

Tadas Tadaitis
cifran 1000
sinupret 200
ibumetin 5000

Andrius Galeckas
sinupret 2000
cifran 630
ibumetin 8900
0
04.12.2008, 20:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2008, 20:04
Помогаю со студенческими работами здесь

ПОМОГИТЕ РАЗОБРАТЬСЯ В КОДЕ
#include &lt;time.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;assert.h&gt; #include...

Помогите разобраться с рекурсией...
Здравствуйте, нашел решение задачи &quot;ханойских башен&quot;, проблема с пониманием. &lt;...&gt; ...

Помогите разобраться с циклом while.
Здравствуйте. Уже долго мучаюсь с крестиками-ноликами. Наконец то подошел финал, как вдруг на самом...

Помогите разобраться с кодом
Код - проверка ввода данных. Если вводиться &quot;x6x&quot;, то вызывается исключение, правильным вводом...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru