Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> найти товар по введенной цене, помогите доделать задачку 
:(
    Опции темы
S3ndeR
Дата 15.6.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Всем здрасти.
Есть у меня следующая задачка: Сформировать массив содержащий сведения об ассортименте товара супермаркета .Структурный тип содержит поля:название товара, цена, количество . Написать прогр. выдающую след. сведения: 1 стоимость самого дорогого товара и его наименование . 2 Название товара, которое не привышает Х руб. Значение Х вводится с клавиатуры.
Вобщем то не получается у меня решить только последнюю часть задания (вывести название товара(ов), цена которых не превышает Х руб.).
Вот мой код:
Код

#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#define N 3
struct Supermarket
{
char tovar[30];
int cena;
int kolvo;
} Group[N];
int main()
{
for (int i=0; i<N; i++)
{
cout << "Vvedite nazvanie tovara : ";
cin >> Group[i].tovar;
cout << "Cena tovara : ";
cin >> Group[i].cena;
cout << "Kolvo tovara : ";
cin >> Group[i].kolvo;
}
cout << "\n____________________________________" << endl;
cout << "ExpTovar" << setw(20) << "Cena" << endl;
cout << "------------------------------------" << endl;

int INFO[N]={0};
for (i=0; i<N; i++)
{
for (int j=0; j<1; j++)
{
INFO[i] = INFO[i] + Group[i].cena;
}
}
int x=0, ExpTovar;
ExpTovar=INFO[0];
for (i=0; i<N; i++)
{
if (ExpTovar<INFO[i])
{
ExpTovar=INFO[i];
x=i;
}
}
cout << Group[x].tovar << setw(22) << Group[x].cena <<endl;
cout << "\n____________________________________" << endl;


int z=0, Skolko;
Skolko=INFO[0];
cout << "Vvedite max cenu : ";
cin >> Skolko;
{
for (int k=0; k<N; k++)
{
INFO[i]=INFO[i]+Group[i].cena;
}

for (i=0; i<N; i++)
{
if (Skolko<=INFO[i])
{
Skolko=INFO[i];
z=i;
}
}
cout << Group[i].tovar << endl;
}


return 0;
}

Подскажите пожалуйста что здесь неправильно. Что то никак у меня не получается решить. :(
PM MAIL   Вверх
LavYaAll
Дата 15.6.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



1) Надо ставить отступы и комменты. Если ты просишь чтоб помогли, то ты предполагаешь, что твою программу будут читать и другие люди кроме тебя. Понимаю что для тебя она очевидна, потому что ты с ней провозился добрый час. А нам вникать надо.

2) Что значит это?
Код

int INFO[N]={0};
for (i=0; i<N; i++)
{
for (int j=0; j<1; j++)
{
INFO[i] = INFO[i] + Group[i].cena;
}
}

Ты обьявляешь одномерный массив. Где тут в этой строчке:
INFO[i] = INFO[i] + Group[i].cena; есть j? А если нет, то зачем там еще один цикл for (int j=0; j<1; j++)? Избавься от этого. Иначе у тебя значение цены каждого товара l раз складывается.
Далее. Ты ведь, как я понял, просто хочешь назначить массиву INFO значения цен товаров. Зачем писать INFO[i] = INFO[i] + Group[i].cena; ? Зачем прибавлять к 0? Пиши просто INFO[i] = Group[i].cena;

3) В строке #52, что это за }? К чему она относится? Ты ее закрывешь в строке #67? Если так, то выходит строка #66 выполняется всего 1 раз.

4) У тебя Skolko обозначает максимальную цену, так? Значит сравнение идет неверно. 
Выводится товары будут те, у которых цена больше(или равно), чем максимальное значение.
Перепиши этот кусок так:
Код

for (int i=0; i < N; i++)
    if (INFO[i] <= Skolko)           
           cout << Group[i].tovar << endl;


5) Зачем копировать значение цен в массив INFO? Почему не работать с полями структуры?

Это сообщение отредактировал(а) LavYaAll - 15.6.2008, 16:41
PM   Вверх
susanin
Дата 15.6.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



Код

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
#define N 3

struct Supermarket
{
string tovar;
int cena;
int kolvo;
} Group[N];

int main()
{
    for (int i=0; i<N; i++)
    {
        cout << "Vvedite nazvanie tovara : ";
        cin >> Group[i].tovar;
        cout << "Cena tovara : ";
        cin >> Group[i].cena;
        cout << "Kolvo tovara : ";
        cin >> Group[i].kolvo;
    }
/*cout << "\n____________________________________" << endl;
cout << "ExpTovar" << setw(20) << "Cena" << endl;
cout << "------------------------------------" << endl;*/
int maxcena;
string tovarWithMaxCena;
maxcena=Group[0].cena;
tovarWithMaxCena = Group[0].tovar;
for(int i=1;i<N;i++)
{
    if(Group[i].cena>maxcena)
    {
        maxcena=Group[i].cena;
        tovarWithMaxCena = Group[i].tovar;
    }
}
cout<<"Max Cena: " << maxcena<<" tovar: "<<tovarWithMaxCena<<endl;
int definedCena;
cout<<"Enter defined cena: ";
cin>>definedCena;
for(int i=0;i<N;i++)
{
    if(Group[i].cena<definedCena)
    {
        cout<<"tovar: "<<Group[i].tovar<<" cena: "<<Group[i].cena<<endl;
    }
}
return 0;
}


вот набросал немного..кстати совет.. если пишешь на с++ то используй лучше в таких случаях string вместо массивов char[]
PM MAIL   Вверх
S3ndeR
Дата 15.6.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Рассказываю: это задание я делал на примере похожего. В инсте была курсовая с такими заданиями, я своё задание делал с большой помощью преподавателя, она практически всё написала сама, в том числе и эти вот INFO[], хотя я слабо понял для его это тут. Поэтому данное задание делал просто немного изменяя/дополняя код от похожей задачки. Сам я в C++ не силён, поэтому делал тем способом которым знал. Поэтому, LavYaAll,  на твои вопросы про INFO[] и прочее я толком ответить не смогу. smile Но за код с максимальным значением спасибо.)
Теперь susanin, тебе тоже огромное спасибо, всё работает. Вот только есть вопрос. Что делает строка 4 (using namespace std;) ? Она нужна для того что бы сделать стрингом tovar и прочие переменные ?

ЗЫ - еще раз ОГРОМНОЕ вам спасибо.)
PM MAIL   Вверх
susanin
Дата 15.6.2008, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



S3ndeR ,строка using namespace std говорит что библиотеки надо брать из стандартного пространства имен... заметь, у меня написано include <iostream> а не <iostream.h>....

Добавлено через 1 минуту и 44 секунды
Цитата(S3ndeR @  15.6.2008,  17:46 Найти цитируемый пост)
для того что бы сделать стрингом tovar

подключается библиотека <string>.... это отдельный тип переменной...
PM MAIL   Вверх
S3ndeR
  Дата 15.6.2008, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



ок. а что тогда надо сделать, что бы было написано <iostream.h> и не было строки using namespace std ?
Если просто удалить эту строку и к инклюдам дописать .h , то ничего не работает.  
PM MAIL   Вверх
susanin
Дата 15.6.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



S3ndeR, а чем тебе мешает эта строчка? 
PM MAIL   Вверх
LavYaAll
Дата 15.6.2008, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 62
Регистрация: 1.5.2008

Репутация: 1
Всего: 1



S3ndeR, 
Насчет задания, ясно.
Насчет кода. Если будешь использовать класс string, то использования std(хотя бы 1 раз) не избежать.

PM   Вверх
S3ndeR
Дата 15.6.2008, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



2susanin: да в принципе ничем. Она мне даже нравится.) Просто думаю вдруг препод скажет сделать без этой строки или спросит что она делает.
Ну ладно, думаю всё норм будет.  smile 
2LavYaAll: аа, вот оно в чем дело. Теперь понятно.)
Спасибо.

Это сообщение отредактировал(а) S3ndeR - 15.6.2008, 19:00
PM MAIL   Вверх
susanin
Дата 15.6.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



S3ndeR, думаю что просить сделать без нее не потребует, а что эта строчка делает мы тебе уже кажется объяснили! smile 
PM MAIL   Вверх
S3ndeR
Дата 15.6.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 15.6.2008

Репутация: нет
Всего: нет



Ну да, всё теперь понятно.  smile 
PM MAIL   Вверх
anatox91
Дата 15.6.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: 1
Всего: 13



Цитата(S3ndeR @  15.6.2008,  18:55 Найти цитируемый пост)
2susanin: да в принципе ничем. Она мне даже нравится.) Просто думаю вдруг препод скажет сделать без этой строки или спросит что она делает.

скажи тогда что это подключается пространство имен std  smile 
а лучше сделать так
Код

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

 smile  (хотя конечно в идеале лучше обращаться к ним через std::, без using'a)


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
susanin
Дата 15.6.2008, 19:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 2
Всего: 7



Цитата(anatox91 @  15.6.2008,  19:45 Найти цитируемый пост)
а лучше сделать так

согласен! smile  
зачем тащить лишний мусор в программу... но для новичка я думаю и так пойдет...
PM MAIL   Вверх
Rififi
Дата 16.6.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 3
Всего: 36



Цитата(S3ndeR @  15.6.2008,  15:45 Найти цитируемый пост)
Вобщем то не получается у меня решить только последнюю часть задания (вывести название товара(ов), цена которых не превышает Х руб.).


Код
// сравнение цены
template <typename T>
struct less_price : public std::unary_function<T, bool>
{
    less_price(int price) : price_(price) {}
    bool operator()(const T& product) const
    { return product.cena < price_; }
    const int price_;
};

// вывод на экран названия товара
template <typename O>
inline O& operator<< (O& os, const Supermarket& prod)
{
    return os << prod.tovar;
}

// вывод на экран товаров, цена которых меньше указанной
void print(const Supermarket* arr, const size_t N, const int price)
{
    std::remove_copy_if(arr, arr+N, std::ostream_iterator<Supermarket>(std::cout, " "), std::not1(less_price<Supermarket>(price)));
    std::cout << std::endl;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.4628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.