Премини към съдържанието
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

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

     

Архивирана тема

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

GERMANY

Пресмятане на C++

Препоръчан отговор


Здравейте! Имам бойната задача да направя програма на " C++ ", но се натъкнах на един проблем. 

        cout<<"Ocenka 1:";	cin>>a.oc1;	cout<<"Ocenka 2:";	cin>>a.oc2;	cout<<"Ocenka 3:";	cin>>a.oc3;

Тези оценки 1,2,3 искам на края да ги изведа (това успях да го направя) и да им сметна средния успех.Та как ще трябва да го направя? 

 

На края оценките ги извеждам така : 

        cout<<a.oc1<<" ";	cout<<a.oc2<<" ";	cout<<a.oc3<<endl;

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

...

Здравейте !

 

До колкото разбирам, въпроса Ви е как да изведете средния успех (т.е. средно-аритметичното) на трите оценки ?

 

Ако това е случая, то отговора е да добавите 1 ред в кода си: 

cout << "Mean: " << setprecision(3) <<(a.oc1+a.oc2+a.oc3)/3.0 << endl;

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

 

Добре да се отбележат 3 неща:

 

1) setprecision е манипулатор, дефиниран в библиотеката iomanip

2) Добавянето на прецизност по този начин ще се отрази само върху извеждането на първите данни. Ако след тях изведем още неща, те няма да бъдат прецизирани.

3) Деленето на 3.0 (а не на 3) е "застраховка", че полученият резултата ще е floating-point число, а не резултат от целочислено делене.

 

Надявам се това да сте имали предвид със запитването си. 

 

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Здравейте !

 

До колкото разбирам, въпроса Ви е как да изведете средния успех (т.е. средно-аритметичното) на трите оценки ?

 

Ако това е случая, то отговора е да добавите 1 ред в кода си: 

cout << "Mean: " << setprecision(3) <<(a.oc1+a.oc2+a.oc3)/3.0 << endl;

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

 

Добре да се отбележат 3 неща:

 

1) setprecision е манипулатор, дефиниран в библиотеката iomanip

2) Добавянето на прецизност по този начин ще се отрази само върху извеждането на първите данни. Ако след тях изведем още неща, те няма да бъдат прецизирани.

3) Деленето на 3.0 (а не на 3) е "застраховка", че полученият резултата ще е floating-point число, а не резултат от целочислено делене.

 

Надявам се това да сте имали предвид със запитването си. 

 

Поздрави !

Точно това ми трябва, но сега пък ми излиза някаква грешка "error C2110: '+' : cannot add two pointers". Какво трябва да направя ? 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Точно това ми трябва, но сега пък ми излиза някаква грешка "error C2110: '+' : cannot add two pointers". Какво трябва да направя ?

Тази грешка говори, че член-променливите Ви са от указателен тип. Това така ли е ? Ако в кода Ви oc1, oc2 и oc3 са например int* или short* или друг указателен тип, то тогава има много по - сериозни проблеми. В този случай следния код, който сте приложил, имам подозрения, че ще направи доволни поразии (ако изобщо Ви позволи да го изпълните):

cout<<"Ocenka 1:";cin>>a.oc1;cout<<"Ocenka 2:";cin>>a.oc2;cout<<"Ocenka 3:";cin>>a.oc3;

Програмата, поне според моите виждания, базирани на приложеното от Вас, би трябвало да изглежда така: 

#include <iostream>#include <iomanip>using namespace std;struct Marks {	short oc1;	short oc2;	short oc3;};int main(){    Marks a;	cout<<"Ocenka 1:";	cin>>a.oc1;	cout<<"Ocenka 2:";	cin>>a.oc2;	cout<<"Ocenka 3:";	cin>>a.oc3;	//TODO Проверки за валидни стойности на оценките.	cout<<a.oc1<<" ";	cout<<a.oc2<<" ";	cout<<a.oc3<<endl;	cout << "Mean: " << setprecision(3) <<(a.oc1+a.oc2+a.oc3)/3.0 <<endl;	system("pause");	return 0;}

 

Моля, ако кода, който съм приложил се различава съществено от това, което имате Вие като разработка, то приложете го в коментарите си, за да можем да Ви дадем достатъчно адекватни отговори, спрямо Вашата разработка. Имам подозрението, че въпросните указатели сочат не към единична данна, а към масиви от данни и логично Ви се изкарва тази грешка. 

 

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Точно това ми трябва, но сега пък ми излиза някаква грешка "error C2110: '+' : cannot add two pointers". Какво трябва да направя ?

Да копираш тук дефиницията на класа или структурата а.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include "stdafx.h"#include <iostream>#include <iomanip>using namespace std;struct Student{char first_name [20] ; char egn[11]; char fn[7]; char oc1[5] ; char oc2[5] ; char oc3[5] ; char oc4[5] ; char oc5[5] ; char oc6[5] ; char oc7[5] ; char oc8[5] ; char oc9[5] ; char oc10[5] ; };int _tmain(int argc, _TCHAR* argv[]){	Student a;	int n,i;	cout<<"Broy studenti:";	cin>>n;	for(i=0;i<n;i++)	{	cout<<"Ime:";	cin>>a.first_name;	cout<<"EGN:";	cin>>a.egn;	cout<<"Fakulteten Nomer:";	cin>>a.fn;	cout<<"Ocenka 1:";	cin>>a.oc1;	cout<<"Ocenka 2:";	cin>>a.oc2;	cout<<"Ocenka 3:";	cin>>a.oc3;	cout<<"Ocenka 4:";	cin>>a.oc4;	cout<<"Ocenka 5:";	cin>>a.oc5;	cout<<"Ocenka 6:";	cin>>a.oc6;	cout<<"Ocenka 7:";	cin>>a.oc7;	cout<<"Ocenka 8:";	cin>>a.oc8;	cout<<"Ocenka 9:";	cin>>a.oc9;	cout<<"Ocenka 10:";	cin>>a.oc10;	}	for(i=0;i<n;i++)	{	cout<<a.first_name<<" " ;	cout<<a.egn<<" " ;    cout<<a.fn<<" ";	cout<<a.oc1<<" ";	cout<<a.oc2<<" ";	cout<<a.oc3<<" ";	cout<<a.oc4<<" ";	cout<<a.oc5<<" ";	cout<<a.oc6<<" ";	cout<<a.oc7<<" ";	cout<<a.oc8<<" ";	cout<<a.oc9<<" ";    cout<<a.oc10<<endl ;	}	return 0;}

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

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

Оценките в програмата ти се въвеждат не като числа, а като низове, съдържащи числа. В повечето езици за програмиране има солидна разлика. Примерно с вторите не може да извършваш математически операции.

Имаш два възможни подхода тук:

[*]Променяш си структурата да дефинира оценките като числа, а не низове. Това е правилният начин, защото оценките са числа и се очаква да бъдат използвани като такива.

[*]Правиш конверсия всеки път, когато ползваш оценките като числа.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Привет !

 

Определено сега се вижда, защо се поражда грешката.

Ще си позволя обаче да попитам няколко въпроса: 

1) Защо е взето решението оценките да се пазят като char масив ? Има ли условие кода да е оптимизиран по памет ?

Причината за този въпрос е, че ще се наложи да се правят допълнителни операции за парсване към числов тип данни (atoi например), както колегата flare е отбелязал над мен.

Това означава, че потенциално ще имаме 10*4 = 40 извиквания на този метод, които ще могат да се спестят само като се промени типа на масивите от char на unsigned short например.

Правейки това, обаче, кода за въвеждане на оценките няма да е на един ред.  

 

2) Добре е вместо 10 едномерни масива да се ползва 1 двумерен. Причината за това е, че по-лесно ще може да се оперира с него, тъй като с двоен цикъл, нещата ще се получат по-компактни като код и по - лесни за обработка, вместо да въртим 10 единични цикъла един след друг. В случая можем да направим аналог с училищния дневник - страниците му приличат повече на таблица, а не на едноредова лента. 

 

3) Добре е да се правят проверки за валидност на данните - в текущия вид на програмата, нищо не пречи да въведа оценка 'Щ' или '-42'.

 

Подходите за решаването на проблема, както колегата е посочил са два - или оперираме с низовете и въртим 10 отделни цикъла от 0 до 4, извиквайки atoi и сумирайки междинните резултати,

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

 

Избора е Ваш :)

 

Поздрави ! 

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Реално този код го взех от учебник и така беше направен. С малко поправки и добавяне на някои работи стана и за моя случай. А ще съм ти много благодарен (и на двамата), ако ми пообясните как да я пооправя, че никога до сега не съм програмирал на C++. (Оказа се по трудно и от Pascal :D

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Реално този код го взех от учебник и така беше направен. С малко поправки и добавяне на някои работи стана и за моя случай. А ще съм ти много благодарен (и на двамата), ако ми пообясните как да я пооправя, че никога до сега не съм програмирал на C++. (Оказа се по трудно и от Pascal :D

Поиграх си малко с кода и реших да направя примерен вариант на заданието. Тъй като трябва да спазя кодекса на програмиста ("Мързела преди всичко"), кода, който ще приложа може да се направи по - оптимизиран от това. Можете да го ползвате в помощ при съставянето на Вашето решение.

#include <iostream>#include <iomanip>using namespace std;#define MAX_ROWS 2 //TODO Променете това на 10 - брой предмети#define MAX_MARKS 3 //TODO Променете това на 5 - брой оценки по един предметstruct Student{	char first_name [20] ; 	char egn[11]; 	char fn[7]; 	unsigned short oc[MAX_ROWS][MAX_MARKS];	float ocMean[MAX_ROWS];	void printStudent() {		cout << "---------------------------------" << endl;		cout << "Name: " << first_name << endl;		cout << "Egn: " << egn << endl;		cout << "FN: " << fn << endl;		for (int i = 0; i < MAX_ROWS; i++) {			cout << "Ocenki po predmet " << i + 1 << " : ";			for (int t = 0; t < MAX_MARKS; t++) {				cout << oc[i][t] << " ";			}			cout << "nMean result: " << setprecision(3) << ocMean[i] << endl;		}		cout << "---------------------------------" << endl;	}};int main(int argc, char* argv[]) //TODO - променете това, според прекомпилирания хедър{	Student* a;	int n;	cout<<"Broy studenti:";	cin>>n;	a = new Student[n];	for(int i=0;i<n;i++) {		cout << "Enter student data: nn";		cout<<"Ime:";		cin>>a[i].first_name;		cout<<"EGN:";		cin>>a[i].egn;		cout<<"Fakulteten Nomer:";		cin>>a[i].fn;		for (int s = 0; s < MAX_ROWS; s++) {			cout << "Ocenki " << s+1 << " : " << endl;			int sum = 0;			for (int t = 0; t < MAX_MARKS; t++) {				//TODO: Да се добавят проверки дали въведената оценка е валидна !				cin >> a[i].oc[s][t];				sum += a[i].oc[s][t];			}			a[i].ocMean[s] = sum/(1.0f*MAX_MARKS);		}	}	//Print the entered students:	cout << "Entered students data: " << endl;	for(int i=0;i<n;i++) {		a[i].printStudent();	}	delete [] a;	system ("pause");	return 0;}

Надявам се това да Ви помогне :)

 

Поздрави !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
...

Мерси много :) Ще го пробвам!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Всъщност пробвах това

#include "stdafx.h"#include <iostream>#include <iomanip>using namespace std;struct Student{char first_name [20] ; char egn[11]; char fn[7]; double oc1 ; double oc2 ; double oc3 ; double oc4 ; double oc5 ; double oc6 ; double oc7 ; double oc8 ; double oc9 ; double oc10 ; };int _tmain(int argc, _TCHAR* argv[]){	Student a;	int n,i;	double f;	cout<<"Broy studenti:";	cin>>n;	for(i=0;i<n;i++)	{	cout<<"Ime:";	cin>>a.first_name;	cout<<"EGN:";	cin>>a.egn;	cout<<"Fakulteten Nomer:";	cin>>a.fn;	cout<<"Ocenka 1:";	cin>>a.oc1;	cout<<"Ocenka 2:";	cin>>a.oc2;	cout<<"Ocenka 3:";	cin>>a.oc3;	cout<<"Ocenka 4:";	cin>>a.oc4;	cout<<"Ocenka 5:";	cin>>a.oc5;	cout<<"Ocenka 6:";	cin>>a.oc6;	cout<<"Ocenka 7:";	cin>>a.oc7;	cout<<"Ocenka 8:";	cin>>a.oc8;	cout<<"Ocenka 9:";	cin>>a.oc9;	cout<<"Ocenka 10:";	cin>>a.oc10;	}		for(i=0;i<n;i++)	{	f=(a.oc1+a.oc2+a.oc3+a.oc4+a.oc5+a.oc6+a.oc7+a.oc8+a.oc9+a.oc10)/10.00;		cout<<a.first_name<<" " ;	cout<<a.egn<<" " ;    cout<<a.fn<<" ";	cout<<a.oc1<<" ";	cout<<a.oc2<<" ";	cout<<a.oc3<<" ";	cout<<a.oc4<<" ";	cout<<a.oc5<<" ";	cout<<a.oc6<<" ";	cout<<a.oc7<<" ";	cout<<a.oc8<<" ";	cout<<a.oc9<<" ";    cout<<a.oc10<<" " ;	cout<<"Sreden uspeh:"<<f<<endl ;		}	return 0;}

И незнайно за мен как се получи :D . Сега изникна друг проблем: Резултата на края (например вкарвам 3-ма студенти) и вместо да ми излезе данните и на 3-мата ми излиза последния 3 пъти. Как да го оправя? 

 

П.П. Не ползвам директно твоя код, защото там нищо не разбирам :)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Всъщност пробвах това

int _tmain(int argc, _TCHAR* argv[]){	Student a;	int n,i;	double f;	cout<<"Broy studenti:";	cin>>n;	for(i=0;i<n;i++)	{	cout<<"Ime:";	cin>>a.first_name;	cout<<"EGN:";	cin>>a.egn;	cout<<"Fakulteten Nomer:";....	}			return 0;}

И незнайно за мен как се получи :D . Сега изникна друг проблем: Резултата на края (например вкарвам 3-ма студенти) и вместо да ми излезе данните и на 3-мата ми излиза последния 3 пъти. Как да го оправя? 

 

П.П. Не ползвам директно твоя код, защото там нищо не разбирам :)

Тук три пъти въвеждаш различни данни, а ги записваш в една и съща променлива. Може да пробваш да декларираш масив от тази структура и всеки студент да е на различен елемент. Също вместо да правиш 10 различни променливи за оценки може да си направиш един масив от 10 оценки.

Например:

//....struct Student{char first_name [20] ; char egn[11]; char fn[7]; double oc[10];};int main(){Student a[3];//...cin>>n;for(int i =0; i<n;i++){cout<<"Ime: ";cin>>studenti[i].first_name;//...cout<<"Ocenka "<<i<<": ";cin>>studenti[i].oc[0] //или някоя оценка от 0 до 10//...}

Нещо такова. По-принцип може още доста да се оптимизира кода, но не знам какво сте учили и какво не сте и какво е условието на задачата.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

С моята задача стигнах до тук : 

#include "stdafx.h"#include <iostream> using namespace std;struct student{	int n,i;char first_name [20] ; char egn[11]; char fn[7]; double oc1 ; double oc2 ; double oc3 ; double oc4 ; double oc5 ; double oc6 ; double oc7 ; double oc8 ; double oc9 ; double oc10 ; int number;	char name[30];	double mark;};int main (){	double s=0;	student arrStudents[60]; 	int numberOfStudents = 0; 	while ( 1 > numberOfStudents || numberOfStudents > 60)	{			  cout << "Broy studenti - ";		  cin >> numberOfStudents;	}	for (int i = 0; i < numberOfStudents; i++)	{			 cout << "Ime = ";		 		 while (cin.get() != 'n');		 		 cin.getline (arrStudents[i].name,30);		 		 cout << "EGN = ";		 cin >> arrStudents[i].egn;				 cout << "FN = ";		 cin >> arrStudents[i].fn;		 		 do 		 {  			 cout << "Oc1 - ";			 cin >> arrStudents[i].oc1;			 s=s+arrStudents[i].oc1;			 cout << "Oc2 - ";			 cin >> arrStudents[i].oc2;			 s=s+arrStudents[i].oc2;			 cout << "Oc3 - ";			 cin >> arrStudents[i].oc3;			 s=s+arrStudents[i].oc3;			 cout << "Oc4 - ";			 cin >> arrStudents[i].oc4;			 s=s+arrStudents[i].oc4;			 cout << "Oc5 - ";			 cin >> arrStudents[i].oc5;			 s=s+arrStudents[i].oc5;			 cout << "Oc6 - ";			 cin >> arrStudents[i].oc6;			 s=s+arrStudents[i].oc6;			 cout << "Oc7 - ";			 cin >> arrStudents[i].oc7;			 s=s+arrStudents[i].oc7;			 cout << "Oc8 - ";			 cin >> arrStudents[i].oc8;			 s=s+arrStudents[i].oc8;			 cout << "Oc9 - ";			 cin >> arrStudents[i].oc9;			 s=s+arrStudents[i].oc9;			 cout << "Oc10 - ";			 cin >> arrStudents[i].oc10;			 s=s+arrStudents[i].oc10;			 cout<<"Srednoto aritmetichno e :"<<s/10.00<<endl;			 s=0;		 }		 while (2 > arrStudents[i].oc1 || arrStudents[i].oc1 > 6);	}			int failed = 0;	for (int i = 0; i < numberOfStudents; i++)	 	{		if (arrStudents[i].oc1 < 3.0) 		{		   failed++;		}	}	cout << endl << "Dvoyki: " << failed << endl;	system ("PAUSE");	return 0; }

Но сега трябва да добавя към програмата още едно условие: Да намира по ЕГН-то пола на студента. А именно трябва да взема предпоследната цифра от него. Как да го направя? 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Как да го направя?

Тук допускането е, че към момента, в който решиш да определяш пол по ЕГН, си се уверил, че имаш валидно ЕГН (което не си - но това си е твой проблем)
bool IsMale(char *egn){    if ((egn[8] - '0') % 2)        return (false);     else	    return (true);}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Тук допускането е, че към момента, в който решиш да определяш пол по ЕГН, си се уверил, че имаш валидно ЕГН (което не си - но това си е твой проблем)

Сега пък трябва от тези ЕГН като разбера дали е жена да намеря, тези които имат 5 двойки.

#include "stdafx.h"#include <iostream>#include <string.h> using namespace std;struct student{	int n,i;char name[30]; char egn[11]; char fn[7]; double oc1 ; double oc2 ; double oc3 ; double oc4 ; double oc5 ; double oc6 ; double oc7 ; double oc8 ; double oc9 ; double oc10 ; int number;};int main (){	double s=0;	student arrStudents[60]; 	int numberOfStudents = 0; 	while ( 1 > numberOfStudents || numberOfStudents > 60)	{	 		  cout << "Broy studenti - ";		  cin >> numberOfStudents;	}		for (int i = 0; i < numberOfStudents; i++)	{			 cout << "Ime = ";		 		 while (cin.get() != 'n');				 cin.getline (arrStudents[i].name,30);		 		 cout << "EGN = ";		 cin >> arrStudents[i].egn;				 cout << "FN = ";		 cin >> arrStudents[i].fn;		 		 do 		 {   			 cout << "Oc1 - ";			 cin >> arrStudents[i].oc1;			 s=s+arrStudents[i].oc1;			 cout << "Oc2 - ";			 cin >> arrStudents[i].oc2;			 s=s+arrStudents[i].oc2;			 cout << "Oc3 - ";			 cin >> arrStudents[i].oc3;			 s=s+arrStudents[i].oc3;			 cout << "Oc4 - ";			 cin >> arrStudents[i].oc4;			 s=s+arrStudents[i].oc4;			 cout << "Oc5 - ";			 cin >> arrStudents[i].oc5;			 s=s+arrStudents[i].oc5;			 cout << "Oc6 - ";			 cin >> arrStudents[i].oc6;			 s=s+arrStudents[i].oc6;			 cout << "Oc7 - ";			 cin >> arrStudents[i].oc7;			 s=s+arrStudents[i].oc7;			 cout << "Oc8 - ";			 cin >> arrStudents[i].oc8;			 s=s+arrStudents[i].oc8;			 cout << "Oc9 - ";			 cin >> arrStudents[i].oc9;			 s=s+arrStudents[i].oc9;			 cout << "Oc10 - ";			 cin >> arrStudents[i].oc10;			 s=s+arrStudents[i].oc10;			 cout<<"Srednoto aritmetichno e :"<<s/10.00<<endl;			 s=0;		 }		 while (2 > arrStudents[i].oc1 || arrStudents[i].oc1 > 6);	}			char w[2] ;	int P,br2ki=0,brj=0;	for (int i = 0; i < numberOfStudents; i++)	 	{		    	strncpy(w,arrStudents[i].egn+8,1); w[2]='0'; P=atoi(w); 	if (P==0||P==2||P==4||P==6||P==8);	  else 	  if(arrStudents[i].oc1<3)br2ki++;      if(arrStudents[i].oc2<3)br2ki++;	  if(arrStudents[i].oc3<3)br2ki++;	  if(arrStudents[i].oc4<3)br2ki++;      if(arrStudents[i].oc5<3)br2ki++;	  if(arrStudents[i].oc6<3)br2ki++;      if(arrStudents[i].oc7<3)br2ki++;	  if(arrStudents[i].oc8<3)br2ki++;	  if(arrStudents[i].oc9<3)br2ki++;	  if(arrStudents[i].oc10<3)br2ki++;	  if(br2ki>=5) brj++;	}	cout<<"Broy jeni"<<brj<<endl;		system ("PAUSE");	return 0; }

Та стигнах до тука. Да ама не в место да излязат жените с двойки излиза каквото му падне

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Та стигнах до тука. Да ама не в место да излязат жените с двойки излиза каквото му падне

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

[*]Не си нулираш променливата br2ki за всяка следваща студентка.

[*]else -то за проверката за пол (която е безобразно написана) важи само за първата проверка след него. сложи проверките в {} блок.

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

@GERMANY Типа char си е число, директно може да го ползваш в изчисления и без такива гимнастики.

      int br2ki,brj=0;      for (int i = 0; i < numberOfStudents; i++) 	if (arrStudents[i].egn[8]%1) {          br2ki=0;	  if(arrStudents[i].oc1<3)br2ki++;          ....	  if(arrStudents[i].oc10<3)br2ki++;	  if(br2ki>=5) brj++;	}      cout<<"Broy jeni"<<brj<<endl;

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

@GERMANY Типа char си е число, директно може да го ползваш в изчисления и без такива гимнастики.

	if (arrStudents[i].egn[8]%1)

Правописна грешка :P

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пола се определя от деветата цифра, а не от осмата. Освен това когато правиш това:

 

 

if (arrStudents[i].egn[8]%1)

Винаги ти дава остатък 0. Знакът '%' означава деление с остатък. При деление на 1 ти никога няма да имаш остатък: 8/1 = 8 - не остава нищо. За да провериш дали числото е четно или нечетно - правиш "%2" и ако остатъка е различен от 0, числото ти е нечетно. Ето така:

if (arrStudents[i].egn[9]%2 != 0) // "!= 0" ознава "различно от 0"

Ако те обърква може да напишеш така:

if (arrStudents[i].egn[9]%2 > 0)

Този ред е не ти трябва:

strncpy(w,arrStudents[i].egn+8,1); w[2]='0'; P=atoi(w); 	if (P==0||P==2||P==4||P==6||P==8);

В този случай можеш да използваш делението с остатък върху char, защото работиш само върху числата от 0 до 9.

 

П.П: Къде учиш?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Объркал съм знака, трябваше да е if (arrStudents[i].egn[8]&1) но и с %2 пак става.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Пола се определя от деветата цифра, а не от осмата. Освен това когато правиш това:Винаги ти дава остатък 0. Знакът '%' означава деление с остатък. При деление на 1 ти никога няма да имаш остатък: 8/1 = 8 - не остава нищо. За да провериш дали числото е четно или нечетно - правиш "%2" и ако остатъка е различен от 0, числото ти е нечетно. Ето така:

if (arrStudents[i].egn[9]%2 != 0) // "!= 0" ознава "различно от 0"
Ако те обърква може да напишеш така:
if (arrStudents[i].egn[9]%2 > 0)

Трябва да прочетеш отново, как се индексират масивите в C и тогава ще говорим, коя е осмата и коя деветата цифра. :D

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×
×
  • Добави ново...