Jump to content
BulForum.com

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


toneff

Recommended Posts

  • 1 month later...
  • Replies 113
  • Created
  • Last Reply

Ех , тук някакви класове в масиви се вкарват , луда работа :) . Надявам се този който го спомена да е в момент на "все ми е тая какво пиша/казвам" :) .

Rubbish , извинявай , но и на мен ми е интересно къде учиш ? :)

Иначе за образованието и в Пловдив има надежда , надявам се все по-млади и интересуващи се студенти да започнат да преподават във ФМИ .

djadomraz , не е до учителите , до желанието на учениците е ,но ти го знаеш това :) .

Link to comment
Share on other sites

Иначе за образованието и в Пловдив има надежда , надявам се все по-млади и интересуващи се студенти да започнат да преподават във ФМИ .

 

Аха... общо взето докато си намерят друга по-добре платена работа. То тези дето разбират работят някъде или в краен случай при някои от доцентите си още от 2ри курс тъй че от останалите дето не разбират чак толкова или ги мързи евентуално някой от тях...

 

 

djadomraz , не е до учителите , до желанието на учениците е ,но ти го знаеш това :) .

 

То даскала като не е писал никога истинска програма - такава, която да я ползват реални хора за нещо а не просто разни примерчета от книги. Та ако той не е правил нищо по-сериозно от това да препише някой пример от учебника, как очакваш да научи нещо студентите (за учениците с този 1 час на седмица е крайно загубена кауза да научат каквото и да е различно от ползване на excel и word... език за програмиране горе-долу могат да получат представа как се пресмятат разни изрази примерно квадратно уравнение.

Link to comment
Share on other sites

Един личен пример става въпрос за главен асистент по програмиране във филиала на ПУ в Смолян :).

Значи ние имаме упражнения тя надраска програма от 10реда на паскал на дъската с почти изсъхнал маркер и седна на едно от пц-тата да си провери майла и си свали някаква картичка обработи е на пайт и удари едно копи пусна си IE и влезна в абв и искаше да е paste :lol: и се чудеше защо не става

Link to comment
Share on other sites

  • 2 weeks later...

За да не отварям нова тема, ще питам направо тука.

 

Въпроса ми е доста елементарен. Искам да видя как се преработва if - else оператор в ?: такъв. Става въпрос за език java, доколкото знам има такава алтернатива на if-else. Не мога да намеря обяснение никъде, а пък не съм го виждал на практика как става. Ето примерно тоя код как може да стане с '?:'

 

 	if(a>b)
	{System.out.println("a>b");
	}
	else 
	{System.out.println("a<b");
	}

 

B)

Link to comment
Share on other sites

System.out.println((a>B)?"a>b":"a<b");

 

Между другото това последното не е вярно защото втория случай влиза и a=b т.е. правилното е a<=b :) Но тъй като е текст можеше спокойно да напишеш каквито си искаш али-бали примерно "случай едно" и "ала-бала 2", но не можах да се сдържа да не изкоментирам очевидното...

Link to comment
Share on other sites

System.out.println((a>B)?"a>b":"a<b");

 

Между другото това последното не е вярно защото втория случай влиза и a=b т.е. правилното е a<=b :) Но тъй като е текст можеше спокойно да напишеш каквито си искаш али-бали примерно "случай едно" и "ала-бала 2", но не можах да се сдържа да не изкоментирам очевидното...

 

Да, вярно, че е така, просто написах нещо, важното беше да видя принципа. ;) Благодаря за бързия отговор.

Link to comment
Share on other sites

Да, вярно, че е така, просто написах нещо, важното беше да видя принципа. ;) Благодаря за бързия отговор.

 

Моля. Не че нещо ама що не потърси в гугъл: http://www.google.bg/search?sourceid=chrom...+%3F+:+operator

 

И още от първия линк намираш къде има ? вътре и стигаш до ей това хубаво обяснение:

http://en.wikipedia.org/wiki/%3F:

 

То и още има ама не ми се търси...

Link to comment
Share on other sites

System.out.println((a>b)?"a>b":((a<b)?"a<b":"a==b"));

 

Това е правилното :bgrin:

 

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

Link to comment
Share on other sites

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

 

здрасти, дядо... :lol:

 

(май вече не ми се парсва подписа коректно обаче в последния perl...)

 

Какво искате да ви напиша на един ред?

 

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

Link to comment
Share on other sites

  • 7 months later...

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

Класът съдържа член-функции:

-Задаване и получаване на стойности за член променливите.

-За пресмятане на средно аритметична стойност на заплатите.

-За намиране на минимална заплата.

 

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

Link to comment
Share on other sites

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

 

 

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

 

Те с тфа последното изречение изби рибата ;) Няма ли поне да опиташ сам? Вярно, че ще е с грешки, но поне ще си вкарал някаква мисъл и ще знаеш или поне ще имаш бегла идея, надявам се, защо си го направил така. Гледайки готов код няма да забележиш многото детайли, в които е дяволът (ако приемем, че ще бъдат спазвани някакви добри практики за писане на код на C++).

 

For a starter:

class Employee {
public:
Employee(string const& name, int const id, int const lengthOfService)
	: _name(name)
	, _id(id)
	, _lengthOfService(lengthOfService) // days perhaps or maybe years?

string Name() const { return _name; }
void SetName(string const& name) { _name = name; }

int Id() const { return _id; }
void SetId(int const id) { _id = id; }

int LengthOfService() const { return _lengthOfService; }
void SetLengthOfService(int const lengthOfService) { _lengthOfService = lengthOfService; }

private:
string _name;
int _id;
int _lengthOfService;
};

Link to comment
Share on other sites

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

 

 

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

 

Въпроса ти е - как се прави клас на C++ или кое? Защото така както си го написал или бъкел не разбираш от това "що е то клас" или търсиш някой да ти напише домашното

 

 

______________

 

DeZoeker, нямаше ли да е по-добре променливите да са m_name, m_id и m_lengthOfService а функциите които връщат стойността да са get_name, get_id, get_lengthOfService? To верно е въпрос на стил и вяно няма но с подчертавка обикновенно почват разни системни хави а е прието с m_ да са member variables дори разни плъгини като напишеш m и натиснеш шифта направо написват подчертавка без да трябва да натискаш и другия клавиш.

Link to comment
Share on other sites

Те с тфа последното изречение изби рибата ;) Няма ли поне да опиташ сам? Вярно, че ще е с грешки, но поне ще си вкарал някаква мисъл и ще знаеш или поне ще имаш бегла идея, надявам се, защо си го направил така. Гледайки готов код няма да забележиш многото детайли, в които е дяволът (ако приемем, че ще бъдат спазвани някакви добри практики за писане на код на C++).

 

For a starter:

 

Естествено, че съм пробвал сам, даже ще съм много доволен, ако сам успея да направя всичко, което не ми е ясно. Само че нямам никой, който да мога да питам и ми е трудно в началото. Като използвах твоя код, стана следното (плюс някои други неща, които ми трябваха):

 

class Rabotnik {
int *socnum, *a[10];
char *cpos;
string name;
double trst;
public:
Rabotnik(){
	socnum = 0;
	trst = 0.0;
}

~Rabotnik(){
}

Rabotnik(char ccpos){
	*cpos = ccpos;
	cout<<"Vuvedi tekushta dlujnost: "<<endl;
	cin>>ccpos;
}

void Print(){
	cout<<"Social Number: "<<socnum<<" /n"<<"Trudov Staj: "<<trst<<endl;
}

string Name()
{ 
	return name; 
}
void SetName(string _name) 
{ 
	name = _name; 
}

int SocNum()
{ 
	return *socnum; 
}
void SetSNum(int _socnum) 
{ 
	*socnum = _socnum; 
}

double TrudSt()
{ 
	return trst; 
}
void SetTrudSt(int _trst) 
{ 
	trst = _trst; 
}
};

int main () {
Rabotnik qR;
qR.Print();
Rabotnik qP;
qP.Rabotnik("");
return 0;
}

 

Знам, че пиша код като нендерталец, обаче не мога за сега по друг начин. :) Средното аритметично и другите там минимални максимални мисля, че се сещам как стават, ще ги пробвам после.

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

 

Въпроса ти е - как се прави клас на C++ или кое? Защото така както си го написал или бъкел не разбираш от това "що е то клас" или търсиш някой да ти напише домашното

 

Домашно нямам, предположих, че някой ще остане с такова впечатление, защото доста пъти съм виждал такива обвинения тука. Просто седнах да се позанимавам, но имам много стабилни пропуски в материята... то направо може да се каже, че нямам знанията. ;)

Link to comment
Share on other sites

Домашно нямам, предположих, че някой ще остане с такова впечатление, защото доста пъти съм виждал такива обвинения тука. Просто седнах да се позанимавам, но имам много стабилни пропуски в материята... то направо може да се каже, че нямам знанията. ;)

 

Ми така кажи - пусни нещо което си направил и питай за помощ а не - ето условието, хайде сега някой да ми даде решението.

 

 

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

 

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

 

 

В знак на добра воля реших да пробвам каква грешка ще изплюе Visual Studio-то като компилирам твоя код, ето ти го оправено:

 

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;

class Rabotnik {
int *socnum, *a[10];
char *cpos;
string name;
double trst;
public:
Rabotnik(){
	socnum = 0;
	trst = 0.0;
}

~Rabotnik(){
}

Rabotnik(char ccpos){
	*cpos = ccpos;
	cout<<"Vuvedi tekushta dlujnost: "<<endl;
	cin>>ccpos;
}

void Print(){
	cout<<"Social Number: "<<socnum<<" /n"<<"Trudov Staj: "<<trst<<endl;
}

string Name()
{ 
	return name; 
}
void SetName(string _name) 
{ 
	name = _name; 
}

int SocNum()
{ 
	return *socnum; 
}
void SetSNum(int _socnum) 
{ 
	*socnum = _socnum; 
}

double TrudSt()
{ 
	return trst; 
}
void SetTrudSt(int _trst) 
{ 
	trst = _trst; 
}
};



int main () 
{
Rabotnik qR;
qR.Print();
Rabotnik *qP = new Rabotnik('a');
return 0;
}

 

Само че на мен не ми е ясно какво прави конструктора и защо трябва да му подаваш символ? Какво означава параметъра ccpos че не мога да стопля и какво се опитваш да постигнеш в конструктора.

 

Друга забележка - методите е по-добре да им подаваш като параметри данните които са въведени от потребителя а не там да се въвеждат. Ама това е по принцип а не за курсови работи :)

Link to comment
Share on other sites

*cpos = ccpos;
cout<<"Vuvedi tekushta dlujnost: "<<endl;
cin>>ccpos;

Може и да се бъркам, че отдавна не съм пипал С, но ако *cpos = ccpos; не трябва ли да е cpos = &ccpos; ако ще се взема адреса на тази променлива.

Иначе излиза, че там където сочи cpos взима стойността на ccpos, която още не е въведена. Но пък за cpos, не виждам да приема адреса на някоя променлива, а ми си е указател само.

 

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

Но може и да се бъркам.

Link to comment
Share on other sites

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

 

Само че на мен не ми е ясно какво прави конструктора и защо трябва да му подаваш символ? Какво означава параметъра ccpos че не мога да стопля и какво се опитваш да постигнеш в конструктора.

 

Друга забележка - методите е по-добре да им подаваш като параметри данните които са въведени от потребителя а не там да се въвеждат. Ама това е по принцип а не за курсови работи :)

 

error C2274: 'function-style cast' : illegal as right side of '.' operator - това е грешката, но доколкото разбрах и сам си го видял вече.

 

За конструктора - идеята ми беше да въвеждам от клавиатурата длъжността на тоя работник - "кво работите - еди кво си". Може въобще да нямам нужда от нов параметър там, само дето иначе не знам как се прави.

 

mIRCata, точно така е благодаря ти. :)

Link to comment
Share on other sites

Няколко забележки:

 

1. Както казах изкарай въвеждането извън обекта

2. socnum го напиши SSN (така е прието), освен това не виждам защо трябва да е указател а не самата стойност. И тъй като не е ясно въпросния номер колко ще е дълъг по-добре го направи да е символен низ а не int поле.

3. Оправи конструктора да получава всички параметри необходими за инициализирането на обекта - име, дръжност, SSN, трудов стаж, брой получени заплати.

4. В main() си организирай въвеждането на данните (брой хора, после 1 по 1 за всеки от тях име, длъжност и т.н.). И не подавай указатели и не пази указатели към нищо защото ще се замажат. Пак в main() слагаш и 2рия цикъл който въвежда данните за заплатите и извиква метод на обекта да запомни n-тата заплата.

 

 

error C2274: 'function-style cast' : illegal as right side of '.' operator - това е грешката, но доколкото разбрах и сам си го видял вече.

 

Ами не, изобщо не беше това. На мен ми изплю 1 камара грешки заради неправилните #include и липсващите референции към стринговете и прочее. Пак не разбрах с каква среда работиш, ако е студиото ето при мен какво има в stdafx.h

 

#pragma once

#ifndef _WIN32_WINNT		// Allow use of features specific to Windows XP or later.				   
#define _WIN32_WINNT 0x0501	// Change this to the appropriate value to target other versions of Windows.
#endif						

#include <stdio.h>
#include <tchar.h>

#include <iostream>
#include <string>

Link to comment
Share on other sites

Няколко забележки:

 

1. Както казах изкарай въвеждането извън обекта

2. socnum го напиши SSN (така е прието), освен това не виждам защо трябва да е указател а не самата стойност. И тъй като не е ясно въпросния номер колко ще е дълъг по-добре го направи да е символен низ а не int поле.

3. Оправи конструктора да получава всички параметри необходими за инициализирането на обекта - име, дръжност, SSN, трудов стаж, брой получени заплати.

4. В main() си организирай въвеждането на данните (брой хора, после 1 по 1 за всеки от тях име, длъжност и т.н.). И не подавай указатели и не пази указатели към нищо защото ще се замажат. Пак в main() слагаш и 2рия цикъл който въвежда данните за заплатите и извиква метод на обекта да запомни n-тата заплата.

 

 

 

 

Ами не, изобщо не беше това. На мен ми изплю 1 камара грешки заради неправилните #include и липсващите референции към стринговете и прочее. Пак не разбрах с каква среда работиш, ако е студиото ето при мен какво има в stdafx.h

 


 

С тая среда работя. За забележките утре ще пиша до къде съм стигнал, защото за съжаление нямам време сега. :(

Link to comment
Share on other sites

Аха студио 2008... аз със 2005-цата го компилирах одеве. Дай после подробности като какъв проект си го създал и т.н. пък ще дадем 1 рамо (поне аз), само не чакай наготово всичко че се нервирам.

Link to comment
Share on other sites

Аха студио 2008... аз със 2005-цата го компилирах одеве. Дай после подробности като какъв проект си го създал и т.н. пък ще дадем 1 рамо (поне аз), само не чакай наготово всичко че се нервирам.

 

Visual C++ - Win32 - Win32 Console Application. Правя си празен проект(цъкам на отметката) и си добавям .cpp файл и започвам.

Та аз казах, че одеве нямам време, ама не се сдържах. До тук стигнах:

 

#include <iostream>
#include <string>
using namespace std;

class Rabotnik {
int SSN;
char *cpos, *name;
double trst, a[10];
double *pari; //ukazatel za masiva
public:
Rabotnik(){
SSN = 0;
trst = 0.0;
}

Rabotnik(char ccpos){
cpos = &ccpos;
cout<<"Vuvedi tekushta dlujnost: ";
cin>>ccpos;
}

void Print(){
cout<<"Social Number: "<<SSN<<" \n"<<"Trudov Staj: "<<trst<<endl;
}

string Name()
{
return name;
}
void SetName(char *_name)
{
name = _name;
}

int SocNum()
{
return SSN;
}
void SetSNum(int _SSN)
{
SSN = _SSN;
}

double TrudSt()
{
return trst;
}
void SetTrudSt(int _trst)
{
trst = _trst;
}

void setPos(char * ccpos){
	cpos = ccpos;
}

char * getPosition(){
	return cpos;
}


int sal; //zaplati

void setSal(){
cout<<"Broi zaplati: "<<endl;
cin>>sal;
pari = new double[sal];
for(int i=0; i<sal; i++) {
		cout << endl << "Zaplata nomer " << i+1 << " e: ";
		cin >> pari[i];
	}
}

double getSal(){
	return sal;
}
double getAvgSal(){
	double sum = 0;
	for(int i=0; i<sal; i++) {
		sum = sum + pari[i];
	}
	sum = sum / sal;  // avg zaplata
	return sum;
}
double getMinSal(){
double min = pari[0];
for(int i=1; i<sal; i++) {
		if(pari[i] < min){
			min = pari[i];
		}
	}
return min;
}
};



int main ()
{
Rabotnik qR;
qR.Print();
Rabotnik blabla;
cout<<"Srednata rabotna zaplata e: "<<blabla.getAvgSal()<<endl;
cout<<"Minimalnata rabotna zaplata e: "<<blabla.getMinSal()<<endl;

return 0;
}

 

Получавам следното:

Unhandled exception at 0x004118d9 in Rabotnik.exe: 0xC0000005: Access violation reading location 0xcccccccc.

Тук вече не знам как се процедира. djadomraz, не направих много промени според твоите точки, а трябваше... Навици и стил на писане нямам както виждате, ще се радвам да видя кое как е хубаво да се прави за улеснение, освен по-горепосоченото. ;)

Link to comment
Share on other sites

Ама виж как не обясняваш после трябва да тръгна да ти тествам програмата за да се усетя че проблема не е при компилирането а при изпълнението. И студиото ти дава безпогрешно точното място на грешката всъщност при това може да погледнеш call stack прозореца за да се усетиш откъде е минало и къде е проблема. Подказка: според теб масива pari кой и кога го инициализира и според теб извикал ли си въпросната инициализация преди да се опиташ да го гледаш? :)

 

ПС: Относно стила на програмиране и прочее - забележките които съм ти казал не са за друго а за да ти е по-четлив и разбираем кода а оттам и по-лесно да го пишеш. Колкото повече време си спестил в натискането на копчетата толкова повече време после ще се чудиш кое как и защо не работи а няколко прости неща като ги направиш като хората става очевАдно кое, къде и как става.

 

Друг въпрос: защо създаваш 2 обекта от клас Rabotnik: qR и blabla? qR за къф чеп ти е след като не го ползваш по-надолу изобщо?

Link to comment
Share on other sites

айде и аз да се включа с нещо нахвърляно много набързо, че вчера си изкълчих гадно глезена и сега ме боли, тоя гипс ме побърква и съм се дрогирал стабилно :lol:

 

main.cpp

#include <iostream>
#include "Employee.h"

using namespace std;

int main()
{
Employee someEmployee;

return 0;
}

 

Employee.h

#include <iostream>
using namespace std;

#ifndef EMPLOYEE_H_INCLUDED
#define EMPLOYEE_H_INCLUDED
class Employee{
public:

	Employee();


	//accessors
	void   setName(string name);
	string getName();
	void   setId(int id);
	int	getId();
	void   setLenghtOfService(int LenghtOfService);
	int	getLenghtOfService();
	void   setPosition(string position);
	string getPosition();


private:
	string mName;
	int	mId;
	int	mLenghtOfService;
	string mPosition;
	int	mSalary[12];
};



#endif // EMPLOYEE_H_INCLUDED

 

Employee.cpp

#include <iostream>
#include "Employee.h"

using namespace std;

Employee::Employee()
{
mName = "";
mId   = 0;
mLenghtOfService = 0;
mPosition = "";
fill_n(mSalary, 12, 0);
}

void Employee::setName(string name)
{
mName = name;
}

string Employee::getName()
{
return mName;
}

void Employee::setId(int id)
{
mId = id;
}

int Employee::getId()
{
return mId;
}

void Employee::setLenghtOfService(int lenghtOfService)
{
mLenghtOfService = lenghtOfService;
}

int Employee::getLenghtOfService()
{
return mLenghtOfService;
}

void Employee::setPosition(string position)
{
mPosition = position;
}

string Employee::getPosition()
{
return mPosition;
}

 

Също така не мога да разбера защо ползвате такова огромно количество указатели, поне за примитивните типове смятам, че е леко излишно :) Утре ще продължа и с другите функции от задачата и ще видим какво ще се получи в крайна сметка :S

Link to comment
Share on other sites

Подказка: според теб масива pari кой и кога го инициализира и според теб извикал ли си въпросната инициализация преди да се опиташ да го гледаш? :)

 

Друг въпрос: защо създаваш 2 обекта от клас Rabotnik: qR и blabla? qR за къф чеп ти е след като не го ползваш по-надолу изобщо?

 

Добре предполагам, че масива pari трябва да го инициализирам в getMinSal(), както съм го направил в setSal(), само че не мога да разбера с каква стойност да го инициализирам? Или трябва да го инициализирам на друго място и само да го извикам на това място? Честно да ти кажа вече ме е яд, че се захванах с тая задача, направо се измъчих. :)

 

qR обекта го бях създал съвсем в началото, когато имах друга идея да направя нещата и в последствие се промени плана и просто остана така. ;)

Link to comment
Share on other sites

Archived

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


×
×
  • Create New...