программка Си++ не совсем понимаю условие задачи, подскажите

Для всех любителей и профессионалов этого нелегкого дела.

Модераторы: Почётные модераторы, Модераторы "Программирование"

программка Си++ не совсем понимаю условие задачи, подскажите

Сообщение Olga » 07 апр 2008, 13:38

В общем точно знаю что решить нужно используя модули и функции ещё с двумерными массивами
вот само условие:
"Имеется каталог на 50 видов бытовой техники, где указаны код, цена и название. Десять оптовых баз составили приоритетные списки, где указаны по 25 кодов бытовой техники, которые хотели бы приобрести. Зная количество денег для этих целей на каждой базе, надо напечатать список названий машин, которых может приобрести каждая база."

Вот всё что у меня получилось:
//---------------------------------------------------------------------------
#include<iostream.h>
#include<conio.h>
#include<windows.h>
//---------------------------------------------------------------------------
const int n=2;
const int m=3;
int vvod(int a[n][m])
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
}
int vvod_summ(int s)
{ for(int i=0;i<m;i++)
cin>>s;
}
void main(void)
{
int i,j;
int a[n][m];
int s,sum;
char StrBuf[200];
CharToOem("Введите коды бытовой техники: ", StrBuf);
cout<<StrBuf<<endl;
vvod(a);
CharToOem("Введите сумму денег выделенную на каждой базе: ", StrBuf);
cout<<StrBuf<<endl;
vvod_summ(s);

getch();
}

ещё есть отдельный файл с кодами и товарами(создавала в обычном блокноте):
1 стиральная_машина 20000
2 пылесос 10000
3 утюг 2000
4 швейная_машина 15000
5 оверлок 9000
6 весы 1500
7 холодильник 20000
8 посудомоечная_машина 6000
9 кофемолка 500
Olga
 
Сообщения: 9
Зарегистрирован: 24 сен 2007, 20:40

Re: программка Си++ не совсем понимаю условие задачи, подскажите

Сообщение Diablo » 09 апр 2008, 22:48

во1)
Olga писал(а):... с двумерными массивами ...
"Имеется каталог на 50 видов бытовой техники, где указаны код, цена и название.

скорее со структурами/списками, либо массив int x[50][2] с кодом и ценой(без копеек, для нижеуказанных сойдет)
а название уже потом по коду из файла брать

во2)
Olga писал(а):Десять оптовых баз составили приоритетные списки, где указаны по 25 кодов бытовой техники, которые хотели бы приобрести.

приоритетные надо думать "по очереди, на что не хватило пропускаем" деньги ессно вычитаем)
Olga писал(а):Зная количество денег для этих целей на каждой базех

деньги мона и с кодами засунуть, главное не запутаться потом)
делаем int y[10][26], где i-компания, j-код (j=0 имеющаяся сумма, ну или j=25)

Olga писал(а):ещё есть отдельный файл с кодами и товарами

fopen,fgets,fclose)
ну, в-общем, структуры надо, либо еще массив char*[50](либо char[50][32]) с названиями, либо файл маслать по цать раз при выводе)

ЗЫ особо думать лень, но стало стыдно за сильную половину... кодеров)
Изображение
Аватара пользователя
Diablo
Флудер
 
Сообщения: 997
Зарегистрирован: 25 сен 2007, 12:42

Re: программка Си++ не совсем понимаю условие задачи, подскажите

Сообщение Olga » 11 апр 2008, 14:13

Пасибо ОГРОМНОЕ!!!


единственно ошибочка у меня где-то...наверно в поиске не могу сообразить...

#include<iostream.h>
#include<conio.h>
#include<windows.h>
//---------------------------------------------------------------------------
const int n=3;
const int m=5;
const N=5;

char StrBuff[200];

struct Zakaz
{
int kod;
char tovar[21];
int cena;
};
Zakaz A[5];

void Input(Zakaz A[],int N);
void InitData(int a[][m], int , int) ;
void OutPut (int a[][m], int , int);
float vvod_summ(float s[]);
void poisk(Zakaz A[],float s[]);

int Mas[n][m];
int i,j;
float s[5];

void main(void)
{

Zakaz A[5];
Input(A,N);
vvod_summ(s);
InitData(Mas,n,m);
OutPut(Mas,n,m);
CharToOem("Вы можете купить: ", StrBuff);
cout<<StrBuff<<endl;
poisk(A, s);

getch();
}

void Input (Zakaz A[], int N)
{
CharToOem("Введите наименование бытовой техники", StrBuff);
cout<<StrBuff<<endl;
for (int i=0; i<N; i++)
{
CharToOem(" Введите код ", StrBuff); cout<<'\t'<< StrBuff;
cin>>A[i].kod;
CharToOem("Введите наименование товара ", StrBuff); cout<<'\t'<<StrBuff;
cin>> A[i].tovar;
CharToOem("Введите цену товара ", StrBuff); cout<<'\t'<<StrBuff;
cin>> A[i].cena;
}
}



void InitData(int a[][m], int rows, int cols)
{ randomize();
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
a[i][j] = random(5) + 1;
}
void OutPut (int a[][m], int rows, int cols)
{
CharToOem("Коды бытовой техники: ", StrBuff);
cout << StrBuff << endl;
for(int i =0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{ cout.width(5);
cout << a[i][j];
}
cout << endl;
}
}

float vvod_summ(float s[])
{
CharToOem("Введите сумму денег выделенную на каждой базе: ", StrBuff);
cout<<StrBuff<<endl;
for(int i=0;i<n;i++)
cin>>s[i];
// return s[i];
}

void poisk(Zakaz A[], float s[])
{

for(int i=0; i<m;i++)
{

if(A[i].cena<s[i])
{
cout<<'\t'<<A[i].tovar;
s[i]=s[i]-A[i].cena;
}
}
}


подскажите, пжалуста
Olga
 
Сообщения: 9
Зарегистрирован: 24 сен 2007, 20:40

Re: программка Си++ не совсем понимаю условие задачи, подскажите

Сообщение Diablo » 11 апр 2008, 22:21

Olga писал(а):Пасибо ОГРОМНОЕ!!!

Услуга платная. Cтоимость одного SMS-сообщения на наш короткий номер всего 9.9 у.е. :D

Olga писал(а):единственно ошибочка у меня где-то...наверно в поиске не могу сообразить...

а вот для того, чтоб лучше соображалось, придуманы каменты и длинные названия переменных (с ф-циями вроде еще ok))
пока вникнешь в твои a,A,Mas,m,n,N,s & Zakaz, всё желание помогать отпадает...

и ваще:
Код: Выделить всё
root@hell:~# g++ prog.c
In file included from /usr/include/c++/4.1.2/backward/iostream.h:31,
                 from prog.c:1:
/usr/include/c++/4.1.2/backward/backward_warning.h:32:2: warning: #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.
prog.c:2:18: error: conio.h: No such file or directory
prog.c:3:20: error: windows.h: No such file or directory
prog.c:7: error: ISO C++ forbids declaration of 'N' with no type
prog.c:29: error: '::main' must return 'int'
prog.c: In function 'int main()':
prog.c:37: error: 'CharToOem' was not declared in this scope
prog.c:41: error: 'getch' was not declared in this scope
prog.c: In function 'void Input(Zakaz*, int)':
prog.c:46: error: 'CharToOem' was not declared in this scope
prog.c: In function 'void InitData(int (*)[5], int, int)':
prog.c:62: error: 'randomize' was not declared in this scope
/usr/include/stdlib.h:445: error: too many arguments to function 'long int random()'
prog.c:65: error: at this point in file
prog.c: In function 'void OutPut(int (*)[5], int, int)':
prog.c:69: error: 'CharToOem' was not declared in this scope
prog.c: In function 'float vvod_summ(float*)':
prog.c:83: error: 'CharToOem' was not declared in this scope

в инстах учат кодить исключительно под венду? :evil:

Olga писал(а):подскажите, пжалуста

а это уже по настроению (причины выше)
Изображение
Аватара пользователя
Diablo
Флудер
 
Сообщения: 997
Зарегистрирован: 25 сен 2007, 12:42

Re: программка Си++ не совсем понимаю условие задачи, подскажите

Сообщение 0xdeadbeef » 12 апр 2008, 10:34

Ошибку искать лень, потому что судя по коду там вообще чепуха делается ...
Вот вся прога, как я понял условия ..


Код: Выделить всё
#include<iostream.h>
#include<conio.h>
#include<windows.h>
//---------------------------------------------------------------------------
const int iCatalogPositions=50;
const int iNumBases=5;
const iBaseListPositions=10;

typedef struct _Catalog
{
int Code;
char Name[255];
int Price;
} T_CATALOG, * PTR_CATALOG;

T_CATALOG Catalog[iCatalogPositions];
int BaseList[iNumBases][iBaseListPositions];

//ф-ция заполнения каталога
void FillCatalog (PTR_CATALOG ptrCatalog, int iPositions);
//ф-ция заполнения списка желаний базы
void FillBaseList(int *ptrBaseList, int iPositions);
//ф-ция поиск индекса  кода, с минимальной ценой в списке желаний
int FindIndex_of_MinPrice(int *ptrBaseList, int iPositions);
//ф-ция поиск цены, по коду в каталоге
int FindPrice_by_Code(PTR_CATALOG, int iCatalogPositions, int Code);
//ф-ция сортировки списка желаний
void SortBaseList(int *ptrBaseList, int iPositions);
//ф-ция вывода списка доступных товаров
void PrintAvailable(int *ptrBaseList, int iLimit);

void main(void)
{
 char StrBuff[200];

 //Заполняем каталог
 FillCatalog(Catalog,iCatalogPositions);

 //заполняем список желаний для каждой базы
 for (int i=0; i<iNumBases; i++)
 {
  CharToOem("\nЗаполняем список базы №:", StrBuff);
  cout<<StrBuff<< i+1 <<endl;
  CharToOem("Коды: ", StrBuff);
  cout<<StrBuff <<endl;
  srand(i);
  FillBaseList(BaseList[i],iBaseListPositions );
 }

  //упорядочиваем списки желаний по ценовому возрастанию
  SortBaseList(BaseList[0], iBaseListPositions );
  cout << "\n";
  for (int i=0; i<iNumBases; i++)
  {
   CharToOem("\n Сортированный список базы №:", StrBuff);
   cout << StrBuff << i+1 << "\n";
   for (int j=0; j<iBaseListPositions; j++)
    cout << BaseList[i][j] << "; ";
  }

  cout << "\n";
  //выводим доступные позиции
  for (int i=0; i<iNumBases; i++)
  {
   int iLimit;
   CharToOem("Введите сумму денег выделенную базе: ", StrBuff);
   cout<<StrBuff<< i+1 <<endl;
   cin>>iLimit;
   CharToOem("\n Досутпные товары для базы №:", StrBuff);
   cout << StrBuff << i+1 << "\n";
   PrintAvailable(BaseList[i], iLimit);
  }


getch();
}

void FillCatalog (PTR_CATALOG ptrCatalog, int iPositions)
{
 char StrBuff[254];
 randomize();
 CharToOem("Заполняем каталог:\n Код | Имя       | Цена\n", StrBuff);
 cout<<StrBuff<<endl;
 for (int i=0; i<iPositions; i++)
 {
  ptrCatalog[i].Code = i;
  sprintf(ptrCatalog[i].Name,"TEST_%d",i);
  ptrCatalog[i].Price =random(100);
  printf("%5d| %9s | %5d \n",ptrCatalog[i].Code,ptrCatalog[i].Name,ptrCatalog[i].Price);
 }
}

void FillBaseList(int *ptrBaseList, int iPositions)
{
 char StrBuff[254];
 for (int i=0; i<iPositions; i++)
 {
  ptrBaseList[i] = random(iCatalogPositions)+1;
  cout << ptrBaseList[i] << "; ";
 }
}

int FindPrice_by_Code(PTR_CATALOG ptrCatalog, int iCatalogPositions, int Code)
{
 for (int i=0; i< iCatalogPositions; i++)
 if (ptrCatalog[i].Code == Code)
  return ptrCatalog[i].Price;
 return (-1);
}

int FindIndex_of_MinPrice(int *ptrBaseList, int iPositions)
{
  int Let_MinPrice =FindPrice_by_Code(Catalog,iCatalogPositions,ptrBaseList[0]);
  int Let_Index_of_MinPrice = 0;
  for(int i=1;i<iPositions;i++)
  {
   int nextPrice = FindPrice_by_Code(Catalog,iCatalogPositions,ptrBaseList[i]);
   if (nextPrice < Let_MinPrice)
   {
    Let_MinPrice = nextPrice;
    Let_Index_of_MinPrice = i;
   }
  }
  return (Let_Index_of_MinPrice);
}

void SortBaseList(int *ptrBaseList, int iPositions)
{
 int tmpCode;
  for(int i=0;i<iPositions;i++)
  {
   int Index_of_MinPrice = FindIndex_of_MinPrice(&ptrBaseList[i], iPositions-i) + i;
   tmpCode = ptrBaseList[i];
   ptrBaseList[i] = ptrBaseList[Index_of_MinPrice];
   ptrBaseList[Index_of_MinPrice] = tmpCode;
  }
}


void PrintAvailable(int *ptrBaseList, int iLimit)
{
 int i=0;
 char StrBuff[254];
 while (iLimit >0 && i<iBaseListPositions)
 {
  if (iLimit - FindPrice_by_Code(Catalog, iCatalogPositions, ptrBaseList[i])>=0)
  {
   CharToOem("\tВы можете купить товар с кодом: ", StrBuff);
   cout<<StrBuff<< ptrBaseList[i]<< endl;
   iLimit -=FindPrice_by_Code(Catalog, iCatalogPositions, ptrBaseList[i]);
   i+=1;
  }
  else
  {
   CharToOem("\tВсе. Остаток:", StrBuff);
   cout<<StrBuff<< iLimit << endl;
   break;
  }
 }
}


P.s. когда уже в инстах умрет этот тупой Борланд с паскалем ...
Keep rocking the boat
Аватара пользователя
0xdeadbeef
Почётный пользователь
 
Сообщения: 3538
Зарегистрирован: 24 сен 2007, 15:11

Re: программка Си++ не совсем понимаю условие задачи, подскажите

Сообщение Olga » 12 апр 2008, 18:49

УХТЫ!!! :Yahoo!: Пасибки оргомное!!! ВЫ - ЛУЧШИЕ!!! :good:
Olga
 
Сообщения: 9
Зарегистрирован: 24 сен 2007, 20:40


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1