Jump to content
BulForum.com

Програма на C++


toneff

Recommended Posts

...................................................

Направете на С++ следната програма:

 

Да се състави програма за обслужване на автосалон. За всеки автомобил се въвежда следната информация: марка на автомобила, година на производство, цена. Програмата да дава възможност за получаване на следните резултати:

1. Извеждане на списък на всички автомобили с въведените данни за тях;

2. Извеждане на списък на всички автомобили, които са произведени преди 1998 година;

3. Извеждане на списък на всички автомобили, чието име започва с OPEL;

4. Извеждане на списък на всички автомобили, подредени в низходящ ред на цената им. Ако има автомобили с една и съща цена, по-напред в списъка да се изведе този, който е по-нов.

...................................................

 

Трябва ми сорс код на подобна програма за да се орентирам по него и да напрява тази, която ми е дадена ....

 

Благодаря предварително

Link to comment
Share on other sites

  • Replies 113
  • Created
  • Last Reply
Със или без класове?

 

Това е типична задача за упражнение на класове, така че очевидно ще е с :) Ако имам време по-късно след филма ще я напиша.

Link to comment
Share on other sites

Трябва ми сорс код на подобна програма за да се орентирам по него и да напрява тази, която ми е дадена ....

 

Благодаря предварително

 

Баш сега да почна да я пиша - ще ми требва 1/2 - 1 час , затва набързо ще нахвърлям идеята , пък така и ти малко ще позагрееш с писането на подобни дивотии смятам - което ще ти е много по-приложимо вбъдеще :)

 

- Правиш си един клас TCar примерно , пускаш му полета - ам квито смяташ че са нужни.

-Отдели годината на производсто да е int че по-лесно да става търсене/сравнение ( мисля че е ключов момент в някои аспекти )

-Пусни си в main() един цикъл за въвеждане , като при всяка интерация си създаваш нов обект от TCar, и го записваш в някакъв масив ( примерно ( най-добре е свързан списък - за да нямаш предварително дефиниран брой ( но незнам на кво C пишеш - щото може и да декларираш на някои C-та променлива от различен тип в момента на извикването и ... но както и да е ... - направи си го статично засега - примерно aCars да е масив от указатели към TCar ( или просто указател към прост тип ) и с големина 10 ( примерно ) ) ) )

 

бих препоръчал да си направиш някакво меню - от където да си избираш операциите - и то да е в някакъв цикъл с възможност за изход ... ( ама тва е гъзария де ) :)

 

Та селдващото нещо което искаш е да изведе колите ... - ми пак си правиш един цикъл от 0 до числото с големина на масива -1 и взимаш указател към обекта от масива и извеждаш каквото там съдържа :)

 

После пак така, ама след като вземеш указатела - веднага проверяваш дали годината е > 1998 и тогава извеждаш ( ако е вярно )

 

Следващото е проверка дали е "opel" - има няколко функции , които проверяват дали определн string е substring на друг string - та ползвай някоя от тях ... сега точно кои бяха - забравих ( ако се сетя ще я адд-на към поста ) , та ако е substring - извеждаш.

екстрата на това да е substring е голяма - щото може да имаш подобни записи:

Opel Ascona

скапан Opel

nадраскан Opel

леко блъснат Opel

и пак ще се открие че има Opel в името - лесно и бързо :)

 

После за нисходящия ред - ми - като идея ми идва да сортираш предварително масива , като сменяш местата на указателите , та после като почнеш да въртиш цикъл за показването им - те вече да са си сортирани ...

Link to comment
Share on other sites

Споко оравих се напраях е с Масив ;)... стана перфектна 2 страници Сорс е :) .. мерси много между другото, може и с класове, но по учебна програма нетрябва с тях и я направих с масив...

 

мерси много за отговорите :punk

Link to comment
Share on other sites

еййй - ма то все едно съм ти казал кво да направиш - хехехехе :)

все пак си е хубаво упражнение :)

 

btw - масив от записи е съшото като масив от калсове в твоя случай , защото и без това не изпозлваш отделни секции на видимост и имаш статична бройка :)

Link to comment
Share on other sites

  • 2 weeks later...

Само като съвет. В С++ харесвам динамиката, щом го учиш гледай да не се ограничаваш със статични масиви и изобщо със статично разпределяне на паметта. Ползвай STL по специално <string> и <vector> хедърите в комбинация с класове. Наскоро писах същатата програма на един приятел, беше станала супер. :)

Link to comment
Share on other sites

  • 7 months later...

Имам следната задача:

 

Съставете програмна система за търговска дейност на аптека, съдържаща сведения за лекарствата(до 1000)

продавани в аптеката.За всяко лекарство, трябва да се поддържа следната информация:уникално име(знаков низ до 40 знака)

странични ефекти(знаков низ, до 80 знака, съдържащ имената на страничните ефекти, разделени със запета), количествена

наличност в склада на аптеката(цяло число), единична цена на лекарството(положително число с до 2 цифри в дробната част)

1.Въведете цяло число N, определящо броя на наличните лекарства в аптеката, след това въведете данните за лекарствата.

Игнорирайте некоректните данни.

2.Отпечатайте списък на наличните в склада лекарства, съдържащ име, количество, и стойност(количество/единична цена) на

лекарството.Списъкът трябва да бъде подреден по намаляване на единичната цена, а при равни цени - по азбучен ред на името на лекарството.

3.Определете и изведете средната единична цена на лекарствата, чито единична цена се различва с до 10% от намерената цена.

4.Определете лекарството с най-висока стойност сред лекарствата, в чието име буквата "а" се среща от 4 до 6 пъти, и отпречатайте

неговото име, количество и единична цена(в случай на няколко лекарства списъкът трябва да бъде подреден по азбучен ред на името налекарството).

 

Повечето от програмата мога да я направя но единственото което ме спъва е сортирането в азбучен ред.Четох за sort() функцията, мога да я използвам за сортиране на числа в даден масив, но не мога да се оправя с сортирането на букви.Ако някой може да ми даде някакви насоки за сортирането ще съм му много благодарен :).И още нещо - все още съм начинаещ за това не давайте някакви сложни решения, а въможно най простите :) . Ето и до къде съм стигнал с писането на програмата:

 

#include <iostream>

#include <string>

#include <iomanip>

#include <algorithm>

 

using namespace std;

 

class apteka

{

private:

char ime[40];

char str[80]; //stran4ni efekti

int nal; //nali4nost v sklada

double cena;

public:

void read();

void sort_cena(int n, apteka a[]);

void print();

int usl_tri(int n, double s);

};

 

int main()

{

cout << setprecision(2) << setiosflags(ios::fixed);

cout << "Vuvedete broq na lekarstvata : ";

int n;

cin >> n;

if(n < 0 || n > 1000)

{

cout << "Error, wrong input ";

return 1;

}

apteka table[1000];

apteka a;

for(int i=0;i<=n-1;i++)

{

table.read();

}

a.sort_cena(n, table);

for(int i =0;i<=n-1;i++)

{

}

}

 

void apteka::read()

{

cout << "Vuvedete imeto na lekarstvoto : ";

char p[100];

cin.getline(p, 100);

cin.getline(ime, 40);

cout << "Vuvedete strani4nite efekti: ";

cin.getline(str, 100);

cout << "Vuvedete nali4nostta v sklada: ";

cin >> nal;

cout << "Vuvedete cenata na lekarstvoto: ";

cin >> cena;

}

 

 

void apteka::sort_cena(int n, apteka a[])

{

for(int i = 0;i<=n-2;i++)

{

int k = i;

double max = a.cena;

for(int j = n-1;j<=n-2;j++)

{

if(a[j].cena > max)

{

a[j].cena = max;

j = k;

}

if(a[j].cena=max)

{

//

 

//

}

}

apteka x = a; a = a[k]; a[k] = x;

}

}

 

void apteka::print()

{

cout << endl;

cout << ime << ", " << str << ", " << nal << ", " << cena;

cout << endl;

}

Link to comment
Share on other sites

В зависимост от желанието могат да се направят доста варианти. Предполагам ти трябва най-лесния, за това погледни какво могат функциите strcmp и strcpy.

Link to comment
Share on other sites

Благодаря, много ми помогнахте :) Успях да си направя програмката, стана перфектна направих я със структури, отказах се от варианта с класове изглежда ми трябва още да ги понауча докато мога да ги използвам пълноценно.Но сега пък изниква нов проблем - още една задача давана на 21 юли 2006г. в ПУ, подобна е на първата но се изисква приемането на входни данни на кирилица.Не знам дали проблема е в моя телевизор(Microsoft Visual Studio 2005), но когато задам на компилатора следния ред

char b[10] = "абвгдеж";

cout << b;

резултатът е "рстуфхц".И още нещо - в задачата се изисква първите имена на авторите да се изписват само с главни бувки.Имаше една вградена функция в header файла <algorithm>, но в момента не мога да намеря точно коя беше.

Link to comment
Share on other sites

//izpit_2006B

#include <iostream.h>

#include <string.h>

struct book

{char zaglavie[41]; //Zaglavie

char imena[80]; //Imena na avtorite

char pavtor[80]; //Imena na pyrvi avtor

int god_izd,god_pr;//Godini na izdavane i pridobivane

int br_ekz; //Broi ednakvi ekzemplyari

double ed_cena; //Edinichna cen 

double st; // Stoinost na vsichki ekzemplyari

} a[1001];//Masiv ot zaglaviya

 

struct avtors

{char avtor[80]; //Imena na avtora

int broi; // Razlichni zaglaviya na avtora

} b[1001]; // Masiv ot avtori za tochka 3

int N,M=0; // N - broi zaglaviya

// M - broi avtori, za uslovieto po tochka 3

void input(book &a)

{

cout<<"Zaglavie: "; cin.getline(a.zaglavie,40);

strtok(a.zaglavie,"\n");

cout<<"Imena na avtorite: "; cin.getline(a.imena,80);

strtok(a. imena,"\n");

strcpy(a.pavtor,a.imena);

strtok(a.pavtor,";");

cout<<"Godina na izdavane: ";cin>>a.god_izd;

cout<<"Godina na pridobivane: ";cin>>a.god_pr;

cout<<"Broi ekzemplyari: ";cin>>a.br_ekz;

cout<<"Edinichna cena: "; cin>>a.ed_cena;

cin.ignore();

a.st=a.ed_cena*a.br_ekz;

}

void output(book a)

{ char *n1, *n2, *n3, ip[80];

strcpy(ip,a.pavtor);

n3=strrchr(ip,' ');//Nasochva n3 kym poslednia interval v ip

n1=strtok(ip," ");//Izvlicha pyrvoto ime n1

n2=strtok(NULL," ");//Izvlicha vtoroto ime n2

n3++;//Nasochva n3 kym sledvashtia znak (poslednoto ime)

cout<<a.zaglavie<<" "<<a.god_izd<<" "

<<n3<<" "<<n1[0]<<"."<<n2[0]<<". "<<a.br_ekz<<endl;

}

void inbooks()

{for (int i=1;i<=N;i++)

{input(a);

for (int j=1;j<i;j++)

if (strcmp(a.zaglavie,a[j].zaglavie)==0)

{cout<<"Zaglavieto "<<a.zaglavie<<" se povtarya!! Vyvedete otnovo! ";

i--;break;}

}

}

void outbooks() {for (int i=1;i<=N;i++) output(a);}

 

void sort_s() // Sortira po godini na_izdavane i pridobivane

{ int i,j; book x;

for(i=2; i<=N; i++)

for (j=N; j>=i; j--)

if (a[j-1].god_izd<a[j].god_izd ||

a[j-1].god_izd==a[j].god_izd &&

a[j-1].god_pr>a[j].god_izd)

{ x=a[j-1];a[j-1]=a[j];a[j]=x;}

}

void spisak() //Izvejda spisyk avtori za 2

{ sort_s();

outbooks();

long obshtbr=0; double obshtast=0;

for (int i=1;i<=N;i++)

{ obshtbr+=a.br_ekz; obshtast+=a.st;

}

cout<<"Obsht br. ekzempliari:"<<obshtbr<<" na stoynost:"<<obshtast<<endl;

}

void dobavi(book x) //Dobavya avtor po tochka 3

{

for (int i=1;i<=M;i++)

/* Ako avtoryt se sreshta v masiva, to uvelich va

poleto broi zaglaviya i napuska podprogramata */

if (strcmp(x.pavtor,b.avtor)==0)

{ b.broi++;return;}

/* Ako izpylnenieto stigne dotuk, to avtoryt ne se e sresht «

do momenta i se dobavya kato nov element v masiva */

M++;strcpy(b[M].avtor,x.pavtor);b[M].broi=1;

}

void maxavtor() //Reshenie na 3

{

for (int i=1;i<=N;i++) dobavi(a);

int max=b[1].broi;

for (i=2;i<=M;i++)

if (b.broi>max) max=b.broi;

cout<<"Maksimalen broy knigi na edin avtor:"<<max<<endl;

cout<<"SLedva spisyk na avtorite s tozi broy:"<<endl;

for (i=1;i<=M;i++)

if (b.broi==max) cout<<b.avtor<<endl;

}

void main()

{ do {cout<<"n=";cin>>N;}

while (N<1 || N>1000);

cin.ignore();

inbooks();

cout<<"Reshenie 2 podtocka:"<<endl;

spisak();

cout<<"Reshenie 3 podtocka:"<<endl;

maxavtor();

}

Link to comment
Share on other sites

  • 5 months later...
...................................................

Направете на С++ следната програма:

 

Да се състави програма за обслужване на автосалон. За всеки автомобил се въвежда следната информация: марка на автомобила, година на производство, цена. Програмата да дава възможност за получаване на следните резултати:

1. Извеждане на списък на всички автомобили с въведените данни за тях;

2. Извеждане на списък на всички автомобили, които са произведени преди 1998 година;

3. Извеждане на списък на всички автомобили, чието име започва с OPEL;

4. Извеждане на списък на всички автомобили, подредени в низходящ ред на цената им. Ако има автомобили с една и съща цена, по-напред в списъка да се изведе този, който е по-нов.

...................................................

 

Трябва ми сорс код на подобна програма за да се орентирам по него и да напрява тази, която ми е дадена ....

 

Благодаря предварително

 

Ако има някой с готово решение, моля нека го публикува.

Благодаря.

Link to comment
Share on other sites

Ако има някой с готово решение, моля нека го публикува.

Благодаря.

Е това са най-баналните учнически (студентски) задачи. Щом искаш С++ направи си един клас за описание на всеки автомобил, тъпчи ги в STL вектор (динамичен масив) и направи няколко метода за нужните операции, който да са капсулирани в отделен клас за по-голяма прегледност и да работят с векор с елементи от класа за автомобили.

Ако се поразтършиш из нет-а ще намериш доста такива задачки за магазини, аптеки, книжарни, библиотеки и т.н. Те всички са напълно еднакви като логика и само наименованията на класовете в кода са различни :)

Link to comment
Share on other sites

O.K. Лесно, лесано ама за мен не е точно толкова и като не мога да се оправя?

ето ти моето миналогодишно, с малко изменения в имената на меню-то и предполагам ще стане

 

	#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<conio.h>
struct koli {unsigned long int cena;
			 char ime[22];
			 int godina;
			 unsigned long int km;
			 };
void menu1(){cout<<setw(22)<<"ime"<<setw(8)<<"godina"<<setw(11)<<"cena"<<setw(8)<<"km";}

void vavejdane(koli a[],int&br){cin.get();
	   cout<<"Broi Koli->";cin>>br;
	   if(!cin){cout<<"Error";getch();}
	   for(int q=1;q<=br;q++){cin.get();
		 cout<<"\n---- "<<q<<" ------\n";
		 cout<<"ime->";cin.getline(a[q].ime,21);
		 cout<<"cena->";cin>>a[q].cena;
		 if(!cin){cout<<"Error";getch();}
		 cout<<"godina";cin>>a[q].godina;
		 if(!cin){cout<<"Error";getch();}
		 cout<<"Kilometri->";cin>>a[q].km;
		 if(!cin){cout<<"Error";getch();}
						}
								};
void izvejdane(koli a[],int br){
	   menu1();
	   for(int q=1;q<=br;q++)
		 cout<<"\n"<<setw(22)<<a[q].ime<<setw(8)<<a[q].godina<<setw(11)<<a[q].cena<<setw(8)<<a[q].km;
	   getch(); }
//   Sortirane
void sortIME(koli a[],int br){
		koli s;int xpand;
		for(int q=1;q<=br;q++){xpand=q;
		 for(int w=q;w<=br;w++)
		  if((strcmp(a[q].ime,a[w].ime)>0)&&(strcmp(a[xpand].ime,a[w].ime)>0))xpand=w;
		 s=a[xpand];a[xpand]=a[q];a[q]=s;
							  }
							 }
void sortGOD(koli a[],int br){
		koli s;int xpand;
		for(int q=1;q<=br;q++){xpand=q;
		 for(int w=q;w<=br;w++)
		  if((a[q].godina<a[w].godina)&&(a[xpand].godina<a[w].godina))xpand=w;
		s=a[xpand];a[xpand]=a[q];a[q]=s;
							}
							 }
void sortKM(koli a[],int br){
	  koli s;int xpand;
	  for(int q=1;q<=br;q++){xpand=q;
	   for(int w=q;w<=br;w++)
		if((a[q].km<a[w].km)&&(a[xpand].km<a[w].cena))xpand=w;
	  s=a[xpand];a[xpand]=a[q];a[q]=s;
							 }
							}
void sortCENA(koli a[],int br){
   koli s;int xpand;
   for(int q=1;q<=br;q++){xpand=q;
	for(int w=q;w<=br;w++)
	 if((a[q].cena<a[w].cena)&&(a[xpand].cena<a[w].cena))xpand=w;
	s=a[xpand];a[xpand]=a[q];a[q]=s;
						 }
													  }
//  Krai sortirane

// Tytsene
void srchkm(koli a[],int br){
				unsigned long int qq;
				int p=0;
				cout<<"Km nai mnogo->";cin>>qq;
				if(!cin){cout<<"Error";getch();}
				menu1();
				for(int q=1;q<=br;q++)
				 if(a[q].km<=qq){
				   cout<<"\n"<<setw(22)<<a[q].ime<<setw(8)<<a[q].godina<<setw(11)<<a[q].cena<<setw(8)<<a[q].km;
				   p++;}
				if(p==0)cout<<"Nqma namereni rezulati\n";
					 getch();   };

void srchIME(koli a[],int br){
	   char z[22]; int r=0;cin.get();
	   cout<<"ime->";cin.getline(z,21);
	   menu1();
	   for(int q=1;q<=br;q++)
		if(strstr(a[q].ime,z)>0){
		 cout<<"\n"<<setw(22)<<a[q].ime<<setw(8)<<a[q].godina<<setw(11)<<a[q].cena<<setw(8)<<a[q].km;r++;}
	   if(r==0)cout<<"Nqma namereni rezulati\n";
		   getch();		   };
void srchGOD(koli a[],int br){
		int qq;
		int p=0;
		cout<<"Godina->";cin>>qq;
		if(!cin){cout<<"Error";getch();}
		menu1();
		for(int q=1;q<=br;q++)
		 if(a[q].godina==qq){
		  cout<<"\n"<<setw(22)<<a[q].ime<<setw(8)<<a[q].godina<<setw(11)<<a[q].cena<<setw(8)<<a[q].km;
		  p++;}
		if(p==0)cout<<"\n Nqma namereni rezulati\n";
				  getch();	 };
void srchCENA(koli a[],int br){
	  unsigned long int qq;
	  int p=0;
	  cout<<"Cena ( nai mnogo ) ->";cin>>qq;
	  if(!cin){cout<<"Error";getch();}
	  cout<<" ime "<<" godina"<<" cena km";
	  for(int q=1;q<=br;q++)
	   if(a[q].cena<=qq){
		cout<<"\n"<<setw(22)<<a[q].ime<<setw(8)<<a[q].godina<<setw(11)<<a[q].cena<<setw(8)<<a[q].km;
		p++;}
	  if(p==0)cout<<"Nqma namereni rezulati\n";
			   getch();	 };
//Krai Tyrsene

// !-> main -!>
int main(){
koli a[44];
int br=0;
char menu;

// !->menu

do{
  cout<<"\n"<<"1. Vavejdane\n";
  cout<<"2.Izvejdane \n";
  cout<<"3.Sortitane \n";
  cout<<"4.Tyrsene \n";

  cout<<"0.Exit\n";
  cin>>menu;
   if(menu=='1')vavejdane(a,br);
   if(menu=='2')izvejdane(a,br);
   if(menu=='3') { cout<<" Sortirane \n- 1. po ime\n";
	  cout<<"- 2. po godina\n";
	  cout<<"- 3. po cena\n";
	  cout<<"- 4. po KM\n";
	  cin>>menu;
	   if(menu=='1')sortIME(a,br);
	   if(menu=='2')sortGOD(a,br);
	   if(menu=='3')sortCENA(a,br);
	   if(menu=='4')sortKM(a,br);
	   menu=99;
				 }
   if(menu=='4') { cout<<" Tyrsene \n- 1. po ime\n";
	  cout<<"- 2. po godina\n";
	  cout<<"- 3. po cena\n";
	  cout<<"- 4. po km\n";
	  cin>>menu;
		if(menu=='1')srchIME(a,br);
		if(menu=='2')srchGOD(a,br);
		if(menu=='3')srchCENA(a,br);
		if(menu=='4')srchkm(a,br);
				 }
   }
while(menu!='0');

return 0;}

Link to comment
Share on other sites

  • 9 months later...
От къде мога да си изтегля библиотеки за C++ i C# ?

 

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

 

Хайде сега уточни за кои точно библиотеки говорим и изобщо за каква платформа, щото C++ има за какво ли не а C# има и за compact framework а за там са леко по-различни нещата.

 

ето ти моето миналогодишно, с малко изменения в имената на меню-то и предполагам ще стане

 

............

 

Не искам да се заяждам но кода е под всякаква критика... верно като за студенти е добре но някоя по-сериозна и голяма програма писана по този начин може да докара този който трябва да я поддържа до самоубийство: променливите са именувани кое как дойде, кода нито е подреден нито коментиран. Изобщо всичко е колкото да не е без хич писано с желание само да тръгне и да отиде автора след тов да се напие от щастие че го е подкарал...

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.


×
×
  • Create New...