Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

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

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

 

C++ задача

Featured Replies

Здравейте приятели.Налага ми се да реша тази задача на c++.Стигнах до някъде,но от там не знам,как да продължа.Ще се радвам ако ми помогнете.Благодаря предварително:

Условие :

-Дадена е група студенти и техните ЕГН,факултетни номера,оценките им по 10 дисциплини и средния им успех.Да се създаде програма използваща подпрограми за :
  * създаване на масив с информация за групата студенти,без да се въвежда среден успех.

  * изчисляване на средния успех на всеки един от студентите.

  * намиране броя СТУДЕНТКИ с успех под 4.50 родени през зимата (1ви 2ри и 12ти месец )

 

Код ( до където съм го докарал ) : От там нататък нямам идея как да продължа.

#include <stdio.h>
#include <std.lib>
void main () 
{
char ocenka[11];
long fn;
float sru;
int m,d,g,Brs,i ;
} ;
char bf [5];
{
    printf ("Име :" );
    gets (st->ime );
    printf ("Дата на раждане\n");
    printf (" Ден :");
    scanf ("%d",&st->rd.d);
    printf (" Месец :") ;
    scanf ("%d",&st->rd.m) ;    
    printf (" Година :") ;
    scanf ("%d",&st->rd.g) ;
    printf (" Факултетен номер :") ;
    scanf ("%ld",&st->fn) ;
    printf (" Oценки по 10те дисциплини :\n") ;
    for ( i=0;i<10;i++)
    {
        printf ("По %d-a дисциплина :",i+1);
        scanf ("%d",&st->oc); 
    }
    gets (bf ) ;
}
void writestud ( student st ) {
    int i;
    printf ("Име: %s\n",st.ime);
    printf ("Дата на раждане:%02d.%02d.%d\n",st.rd.d,st.rd.m,st.rd.g);
    printf ("Факултетен номер:%06ld\n",st.fn);
    printf ("Група:%hd\n",st.gr);
    printf ("Оценки:");
    for ( i=0;i<10;i++)
        printf ("\n");
        printf ("Среден успех : %4.2f\n",st.sru);
}
void srusp {
    int j , s=0 ;
    for (j=0;j<10;j++) 
        s+=st->oc [j];
    st-> sru=s/10;
}
void main
    int i;
printf ( "Брой студенти:");scanf ( "%d", & brs);
gets (bf);
for (i=0;i<brs;i++)

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <cstdlib>
using namespace std;

struct STUDENT
{
	string ime;
	unsigned long long egn;
	unsigned facnumber;
	map <string, float> ocenki;
	float sreden_uspeh;
	STUDENT();
};



vector <STUDENT> data;

STUDENT::STUDENT()
{
	ocenki["geografia"] = 3.0;
	ocenki["istoria"] = 3.0;
	ocenki["politika"] = 3.0;
	ocenki["bozhie slovo"] = 3.0;
	ocenki["budizam"] = 3.0;
	ocenki["hermetizam"] = 3.0;
	ocenki["matematika"] = 3.0;
	ocenki["elektrotehnika"] = 3.0;
	ocenki["sapromat"] = 3.0;
	ocenki["chas na klasnata"] = 3.0;
}

void izhod()
{
	exit(0);
}

void sazdaimasiv()
{
	int i;
	STUDENT student;
	string input;
	cout << "Vavezhdane na danni za studenti. q za izhod ot vavezhdaneto.\n";
	for (;;)
	{
	input_ime:
		cout << "\n\ime = ";
		cin.sync();
		cin.clear();
		getline(cin, input);
		if (input == "q") return;
		if (input == "")
		{
			cout << "zadylzhitelno e da se vavede ime";
			goto input_ime;
		}
		student.ime = input;
		input_egn:
		cout << "\negn = ";
		cin.sync();
		cin.clear();
		getline(cin, input);
		if (input[0] == 'q') break;
		for (i = 0; i < input.length(); i++)
		{
			if (!isdigit(input[i]))
			{
				cout << "\n\negn se sastoi samo ot cifri\n\n";
				goto input_egn;
			}
		}
		if (input.length() != 10)
		{
			cout << "\negn se sastoi ot tochno 10 cifri\n\n";
			goto input_egn;
		}
		student.egn = strtoull(input.c_str(), 0, 10);
		input_facnumber:
		cout << "\nfakulteten nomer = ";
		cin.sync();
		cin.clear();
		getline(cin, input);
		if (input[0] == 'q') break;
		for (i = 0; i < input.length(); i++)
		{
			if (!isdigit(input[i]))
			{
				cout << "\n\nfakultetnia nomer se sastoi samo ot cifri\n\n";
				goto input_facnumber;
			}
		}
		student.facnumber = strtoul(input.c_str(), 0, 10);
		for (map <string, float>::iterator
			it = student.ocenki.begin(); it != student.ocenki.end(); it++)
		{
			vavedi_ocenka:
			cout << "\n";
			cout << "ocenka po " << it->first << " = ";
			cin.sync();
			cin.clear();
			getline(cin, input);
			if (input == "q") return;
			it->second = strtof(input.c_str(), 0);
			if ((it->second < 2.0) || (it->second > 6.0))
			{
				cout << "\nocenkata sledva da e mezhdu 2.0 i 6.0\n";
				goto vavedi_ocenka;
			}
		}
		data.push_back(student);
	}
}

void sreden_uspeh()
{
	int i;
	float sum;
	for (i = 0; i < data.size(); i++)
	{
		sum = 0;
		for (map <string, float>::iterator
			it = data[i].ocenki.begin(); it != data[i].ocenki.end(); it++)
		{
			sum = sum + it->second / 10;
		}
		data[i].sreden_uspeh = sum;
	}
	sum = 0;
	for (i = 0; i < data.size(); i++)
	{
		sum = sum + data[i].sreden_uspeh / data.size();
		cout << "\n" << data[i].ime << "\t" << data[i].sreden_uspeh;
	}
	cout << endl << "sreden uspeh na srednite uspehi = " << sum;
}

void studentki_sreden_uspeh_zimata()
{
	unsigned mob;
	int i;
	int count = 0;
	float sum;
	for (i = 0; i < data.size(); i++)
	{
		sum = 0;
		for (map <string, float>::iterator
			it = data[i].ocenki.begin(); it != data[i].ocenki.end(); it++)
		{
			sum = sum + it->second / 10;
		}
		data[i].sreden_uspeh = sum;
	}
	for (i = 0; i < data.size(); i++)
	{
		mob = data[i].egn / 1000000 % 100;
		if ((mob == 1) || (mob == 2) || (mob == 12))
		{
			if ((data[i].egn % 2 == 0) && (data[i].sreden_uspeh < 4.5)) count++;
		}
	}
	cout << "studentki s uspeh < 4.50 rodeni zimata = " << count;
}

void(*ptf[4])() = { sazdaimasiv, sreden_uspeh, studentki_sreden_uspeh_zimata, izhod };


int main()
{
	string s;
	int choice;
	for (;;)
	{
		cout << "\n\n\nMenu\n\n";
		cout << "1 Vavedete danni na studenti\n";
		cout << "2 Izchislete srednia uspeh na vsichki studenti\n";
		cout << "3 Namerete broia studentki s uspeh pod 4.50 rodeni prez zimata\n";
		cout << "4 Izhod\n\n";
		cout << "choice = ";
		cin.sync();
		cin.clear();
		getline(cin, s);
		choice = strtol(s.c_str(), 0, 10);
		if ((choice >= 1) && (choice <= 4))
		ptf[choice - 1]();
	}
	return 0;
}

 

Редактирано от Реджеп Иведик (преглед на промените)

Ще му пишат някоя двойка с тея goto-та.

Обработката на ЕГН-то е пълна каша - след като се въвежда като стринг е по-добре да си остане като такъв.

По-лесно имаш достъп до цифрите - но дори и да го обърнем в число пак е сбъркано - ще изведе броя не на студентките, а на тея дето контролното число е четно. А и ако има някои от "спешните" родени зимата ще ги игнорира щото за тези родени след 1999г месеца е с +40

и на числото кое му е трудното = х / 1000000 % 100 и се получава двуцифреното число на месеца.

А за след 1999 не знаех. Не мога да знам всичко. Просветлението не е всеведение. Скепсис само ви обърква главите.

Не е ли на жените четно, а на мъжете нечетно ?

И туй не съм знаел, ако е така.

10-та цифра е контролна, пола е 9-та - нечетна за жените четна за мъжете 

масеца е +20 за родените преди 1900 и +40 за родените след 1999г

mob = data.egn / 1000000 % 20;

Редактирано от ined (преглед на промените)

Благодаря !

значи х / 10 % 2 == 1 трябва да е обективна истина за да е на жена.

Не е трудно с число. Даже ми се видя по лесно, за това го конвертирах.

А след 1999 се прибавя 40 към числото на месеца ли ?

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

void studentki_sreden_uspeh_zimata()
{
	unsigned mob;
	int i;
	int count = 0;
	float sum;
	for (i = 0; i < data.size(); i++)
	{
		sum = 0;
		for (map <string, float>::iterator
			it = data[i].ocenki.begin(); it != data[i].ocenki.end(); it++)
		{
			sum = sum + it->second / 10;
		}
		data[i].sreden_uspeh = sum;
	}
	for (i = 0; i < data.size(); i++)
	{
		mob = data[i].egn / 1000000 % 100;
		if ((mob == 1) || (mob == 2) || (mob == 12) || (mob == 41)
                                || (mob == 42) || (mob == 52))
		{
			if ((data[i].egn / 10 % 2 == 1) && (data[i].sreden_uspeh < 4.5)) count++;
		}
	}
	cout << "studentki s uspeh < 4.50 rodeni zimata = " << count;
}

 

Колегата може да сия копира и да я пейстне върху горната.

Ето матриала от уики

https://bg.wikipedia.org/wiki/%D0%95%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD_%D0%B3%D1%80%D0%B0%D0%B6%D0%B4%D0%B0%D0%BD%D1%81%D0%BA%D0%B8_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80

Редактирано от Реджеп Иведик (преглед на промените)

  • Автор

Благодаря приятели.Живи и здрави бъдете.Явно не било толкова трудно.Лично аз пробвах да го правя това третото условие,но не  докарах до разумен резултат.Благодаря отново !

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

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

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.