Форум

Data.BG Форуми: C++ задача 2 - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

C++ задача 2

#1
Потребителят е неактивен   Aleks96 

  • Група: Потребители
  • Мнения: 9
  • Регистриран: 08-April 17
  • Репутация: 0
  • Пол:Жена
  • Град:София
Здравейте ) който разбира да я драсне набързо задачката/ако може да започва със студиото #include<stdio.h>/ Благодаря предварително))

Да се състави програма за състояние по ориентиране на ученици, която поддържа следната информация за участниците:
име, ЕГН, клас, училище, брой точки;
и извършва следните операции:
създава нов празен файл; добавя нова информация за участници и изтрива ненужната за отказали се; извежда имената на всички ученици от дадено училище; извежда името и училището за всички момичета, които имат повече от 20 точки.
0

#2
Потребителят е неактивен   georgedimov 

  • Група: Потребители
  • Мнения: 5330
  • Регистриран: 26-May 03
  • Репутация: 61
  • Пол:Мъж
  • Град:Велико Търново
#joke
Чапаев - Петка, за пети път ми водиш жена, а не мома!
Петка - Как може, Василий Иванич, аз лично ги проверявах! Бяха!
#endjoke
Та понеже ставаше дума за момичета, полът на притежателя на ЕГН-то се определя от четността на предпоследната му цифра
((YourEGN[8] - '0') % 2) ? "Female" : "Male";

Освен това самото ЕГН трябва да е валидно
// File : IsValEgn.cpp
// Target OS : Windows 7 Ultimate SP 1
// Target Compiler : Dev-C++ 5.11 (TDM-GCC 4.9.2 32-bit Release)

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

static unsigned short dm[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static unsigned short weight[9] = { 2, 4, 8, 5, 10, 9, 7, 3, 6 };
static int bdY, bdM, bdD; // we use these global variables to avoid intensive stack manipulation

bool IsLeapYear(unsigned Year)
{
   return ((Year % 4 == 0 && Year % 100 != 0) || Year % 400 == 0);
}

void SetDaysPerMonth(unsigned Year)
{
    dm[1] = (IsLeapYear(Year)) ? 29 : 28;
}

bool IsValEgn(char *Egn)
{
     bdY = 0, bdM = 0, bdD = 0; // external variables
     int ch, len = strlen(Egn);
     unsigned i, chk = 0;
     char temp[3];
     
	 if (!(Egn) || len != 10)
		return false;
     strncpy(temp, /*&Egn[0]*/ Egn, 2);
     bdY = atoi(temp);

     strncpy(temp, /*&Egn[2]*/ Egn + 2, 2);
     bdM = atoi(temp);
     if (bdM >= 1 && bdM <= 12)
     {
        bdY += 1900;
     }
     else if (bdM >=21 && bdM <= 32)
     {
          bdY += 2000;
          bdM -= 20;
     }    
     else if (bdM >=41 && bdM <= 52)
     {
          bdY += 1800;
          bdM -= 40;
     }    
     else
     {
         cout << "\aNo proper month value in EGN\n";
         return false;
     }

	 SetDaysPerMonth(bdY); 
    
     strncpy(temp, /*&Egn[4]*/ Egn + 4, 2);
     bdD = atoi(temp);
     if (bdD < 1 || bdD > dm[bdM - 1]) // Jan = 0, Feb = 1, ... Dec = 11
     {
        cout << "\aNo proper day value in EGN\n";
        return false;
     }
     
     for (i = 0; i < 9; i++)
     {
         ch = Egn[i] - '0';
         chk += ch * weight[i];
     }
     
     if (((chk % 11) % 10) != (Egn[9] -'0'))
     {
        cout << "\aInvalid checksum in EGN \n";
        return false;
     }   

     return true; 
}
////////////////////////////////////////////////////////////
// test only, please !!!
////////////////////////////////////////////////////////////
main() // int main(int argc, char *argv[])
{
	char YourEGN[11];
	bool valid;
	
	cout << "Please, test Your EGN = ";
	cin >> YourEGN;
	valid = IsValEgn(YourEGN);
	cout << "Your EGN = " << YourEGN << " is " << ((valid) ? "valid" : "invalid") << endl;
	if (valid)
		cout << "And You're " << (((YourEGN[8]-'0') % 2) ? "Female" : "Male") << endl;
	
	return 0;
}
////////////////////////////////////////////////////////////
// test only, thanks !!!
////////////////////////////////////////////////////////////


Въвеждането на валидно ЕГН за съжаление е проблем на задклавиатурното устройство и не може да се корегира програмно :sadsad:

Мнението беше редактирано от georgedimov: 22.05.17 - 23:27

0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login