Categories
бсу програмиране софтуер

Минимален брой необходени ребра в ориентиран граф при произволен старт

Графът
Графът

Даден е ориентиран граф с върхове и ребра. От стандартния вход са зададени числата N и M, съответно брой върхове и брой ребра. Върховете са номерирани с цели числа от 1 до N. На всеки от следващите M реда има по две числа U и V, което означава, че от връх с номер U има ребро към връх с номер V.

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

Примерен вход 1 Примерен изход 1
10 12
1 2
2 3
2 4
3 1
4 5
4 7
5 6
6 3
7 8
8 9
9 10
10 7
1
Примерен вход 2 Примерен изход 2
2 2
1 2
2 1
0

Решение на задачата за намиране на минимален брой необходени ребра в ориентиран граф при произволен старт, базирано на езика C++.

Categories
бсу програмиране софтуер

Лексикографска подредба на числа

Лексикографска подредба на числа наричаме такава редица от естесвени числа, където има съвпадение на първа, втора и т.н. до n-та цифра. Такава редица се нарича още речникова подредба на числата. Например ако са дадени 11 числа, то тяхната лексикографска подредба е: 1 10 11 2 3 4 5 6 7 8 9.

Напишете на програма която: на първи ред въвежда число N, задаващо броят на примерите, след което за всеки от тези примери се въвеждат числа M и Х, при което програмата намира и отпечатва поредния номер на Х от лексикографска подредба на M числа.

Примерен вход Примерен изход
3
13 3
11 2
20 11
7
4
3

Решение на задачата за лексикографска подредба на числа базирано на езика C++

Categories
бсу програмиране софтуер

Тренировка на АТП към БСУ от 23 март 2013

Занятие на Академията за таланти по програмиране (АТП) към Бургаски свободен университет (БСУ) бе проведено на 23 март 2013. Включващо състезание в системата bgcoder.com, съдържащо 3 задачи с време за решаване 3 астрономически часа, разделено в 3 категории 4, 5 и 6 клас. За домашна работа учениците имат време до 30 март 2013 да решат 10 задачи в SPOJ тренировъчната система на АТП. Решените задачи могат да изпращат в тренировъчната система SPOJ. Тренировките за домашна работа носят състезателни номера 23 и 24. Успех на всички !

Categories
бсу програмиране софтуер

Сбирка на клуба по състезателно програмиране на 18 март 2013

Сбирка на клубът по състезателно програмиране към Бургаски свободен университет на 18 март 2013 и решаване на задачи от http://bgcoder.com/Contest/Practice/103.

Клубът по състезателно програмиране е една студентска инициатива подкрепена напълно от Бургаски свободен университет. Участващите студенти се събират в лаборатории компютърен клас на БСУ и решават програмистки и математически задачи. Клуба има за задача да подготвя студентите за състезания и олимпиади по програмиране, като републиканската студентска олимпиада по програмиране (РСОП).

Categories
.NET Microsoft бсу програмиране софтуер

Публикуване на приложения за Windows 8

Въобще за да публикувате в Microsoft Store приложения се нуждаете на първо от Visual Studio 2012, както и от компетенци за работа с продукта.

Процеса по подаване на приложение включва следните стъпки: Име на приложението (2 минути), детайли за
продажба (5 минути), допълнителни възможности (5 минути), възрастово таргетиране (5 минути), криптиране (5 минути), качване на пакетите на приложението Ви (30 минути), описание на възможностите му (30 минути), добавяне на бележки към тестерите (2 минути). Времето необходимо за целия процес по поддаване на Вашето приложение всъщност е значирелно по-малко от това което Microsoft представят.

След попълване на всички данни за Вашето приложение се стартира процеса на сертификация, който включва следните стъпки: предварителна обработка (около 1 час), тестове за сигурност (около 3 часа), техническо съответсвие (отнема около 6 часа), съответсвие на съдържанието (отнема около 7 дни).

Същинския процес на публикуване започва след като приключи процеса на сертификация описан по-горе. Необходимо е цифрово подписване и реалното публикуване на приложението в Microsoft Store, което отнема около 4 часа.

Инструкции за безплатно публикуване на Windows 8 приложения посредством програмата Microsoft DreamSpark.

MS Certification Process
MS Certification Process
Categories
бсу програмиране софтуер

АТП в есенният ученически турнир по информатика “Джон Атанасов”

В периода 23-25 ноември 2012  се проведе националeн есенен ученически турнир по информатика “Джон Атанасов”, в който взеха участие над 300 ученици от цялата страна разделени в пет групи: Група А (11 – 12 клас), Група B (9 – 10 клас), Група С (7 – 8 клас), Група D (6 клас), Група E (4 – 5 клас).

Академията за таланти по програмиране също участва на турнира с 10 ученици, под ръководството на гл.ас.д-р Димитър Минчев, преподавател в Центъра по информатика и технически науки на Бургаски свободен университет и ръководител на школата.

Трима  от учениците са 6 клас в група D и седем от тях са 5 клас в група Е. В група D  извоювахме 12 място от 44 участника, а в група E съответно 25 място от 92 участника. Всички малки програмисти (група E) са с ненулев резултат.

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

Условия на задачите и резултати от турнира “Джон Атанасов” (23-25 ноември 2012), са налични в интернет на адрес: http://www.math.bas.bg/infos/Shumen_2012.html

Categories
бсу програмиране софтуер

Академията за таланти по програмиране и Есенен турнир по информатика “Джон Атанасов”

Условия и решения на задачите от тренировката на Академията за таланти по програмиране на Бургаски свободен университет от 17 ноември 2012, включва 5 задачи. Следващото занятие на АТП е на 24 ноември 2012, за първа група от 10:00 до 13:30 и за втора група от 14:00 до 17:30 в зала 428.

В периода 23-25 ноември 2012 ще се проведе есенният ученически турнир по информатика “Джон Атанасов”. Участниците се разделят в пет групи, както следва: Група А (11 – 12 клас), Група B (9 – 10 клас), Група С (7 – 8 клас), Група D (6 клас), Група E (4 – 5 клас).

Академията за таланти по програмиране също ще участва на турнира с изявени ученици под ръководството на гл.ас.д-р Димитър Минчев, преподавател в Центъра по информатика и технически науки на Бургаски свободен университет и ръководител на Академията за таланти по програмиране.

За тренировка и подготовка за предстоящия турнир, учениците могат да ползват архив на задачите от 2011 година от XI Есенен турнир “Джон Атанасов” (25-27 ноември 2011), наличен в интернет на адрес: http://www.math.bas.bg/infos/Shumen_2011.html.

Желателно е да погледнат условията и решенията на задачите в съответната група A,B,C,D или E.

Categories
програмиране софтуер

Да живее, новия Dev-C++

Ура, благодарение на Холандеца Orwell, чиито блог можете да откриете в интернет на адрес http://orwelldevcpp.blogspot.com/Dev-C++ е жив и се развива динамично. Последната му версия е 5.3.0.2. Ето някои от подобренията в нея:

  •  подобрен графичен интерфейс
  • средата може да се инсталира без компилатор
  • поддържат се разични компилатори
  • избор между 32 и 64 бита
  • дебъгера работи 🙂
  • налична е както инсталационна така и преносима версия “portable”
  • вече никога няма да пишем system(“pause”);
Categories
бсу програмиране софтуер

Подобряване на бързодействието при откриване на прости числа

Sieve of Eratosthenes
Sieve of Eratosthenes

Решето на Ератостен е алгоритъм за намиране на всички прости числа в интервала [1, n], където n е произволно естествено число. Алгоритъмът е кръстен на древногръцкия математик Ератостен, на когото е и приписано изобретяването му.

Тук е предложена програмна имплементация на езика C++ на нов по-бърз метод за откриване на прости числа, който превъзхожда Решето на Ератостен по бързодействие.

Търсят се простите числа до 1000000, като решението по метода на Решето на Ератостен е публикувано във файла 1.cpp а новия метод във файла 2.cpp (ще ви е необходим и класа timer.h), в резултат са дадени времената за изпълнение в милисекунди:

1.cpp = Time: 1931.95 ms
2.cpp = Time: 33.7718 ms

Прозиводителността е зашеметяваща 😉

Categories
програмиране

Прости числа

Предложение за решение на задачата за намиране на прости числа от петия междууниверситетски турнир по програмиране от 2002 година.

#include<iostream>
using namespace std;
int main()
{
// Задаване на интервал [a,b] в който се търси броя на простите числа
long long a = 100200300, b = 100300300;

// Брояч на простите числа
long long c = 0;

// Задаване на максималната допъстима грешка
long long MaxErr = ((b – a)*0.1) + 1;

// Ако началото е четно го инкрементираме, т.е. започваме от първото нечетно
if (a%2 == 0) a++;

/*
Цикъл за обхождане на числата в интервала [a,b]
Разглеждат се само нечетни, защото четните не са прости.
Което автоматично редуцира кандидатите в интервала [a,b] наполовина
count = (b – a) / 2
*/
for (long long i=a; i<=b; i+=2)

// Проверка за изключване на всички числа завършващи на 5, още се редуцира броя на кандидатите
if (i%10 != 5)
{
// Булева променлива означаваща че числото е просто (true)
bool isPrime = true;

// За текущия кандидат i се проверява дали се дели на всички числа в интервала [3, i/MaxErr]
// Това действие също редуцира кандидатите
for (long long j=3; j < i/MaxErr; j+=2)
if(i%j == 0)
{
// Ако е така, то числото не е просто.
isPrime = false;
// Следователно можем да прекъснем проверката в интервала [3, i/MaxErr], това също ускорава
break;
}

// Ако е просто инкрементираме брояча
if (isPrime) c++;
}

// Извеждане на броя на простите числа в интервала [a,b]
cout << c << endl;
return 0;
}

Условие на задачата: http://www.math.bas.bg/~nkirov/2002/5cp/prime.html

Categories
.NET Microsoft бсу програмиране софтуер

Kлуб по състезателно програмиране

Стартира сайта на клуба по състезателно програмиране към Център по информатика и технически науки на Бургаският свободен университет. Всеки който се чувства съпричастен с тази инициатива може да се регистрира на този сайт: http://dev.bfu.bg

Categories
програмиране

Метод за пресмятане на произведението на 2 трицифрени числа

Тук ще представя много интересна реализация на метод за пресмятане на 2 трицифрени числа. Използвайки 5 стъпковата схема, за умножение представена на фигурата, можете да пресметнете само на един ред произведението, като на всяка от петте стъпки трицифрените числа са представени на 2 реда. В конкретния пример са използвани: 123 х 201.

Реализация в C++

#include
using namespace std;

// Функция за умножение на две трицифрени цели числа
long SuperMultiplier(int A, int B)
{
// A
int a1 = (A/100)%10;
int a2 = (A/10)%10;
int a3 = A%10;
// B
int b1 = (B/100)%10;
int b2 = (B/10)%10;
int b3 = B%10;

// C
long C = a3*b3 + (a3*b2 + a2*b3)*10 + (a1*b3 + a2*b2 + a3*b1)*100 + (a1*b2 + a2*b1)*1000 + (a1*b1)*10000;

return C;
}

// Главна функция
int main()
{
int A,B;
cout << “A B\n”;
cin >> A >> B;
cout << SuperMultiplier(A,B) << endl;
return 0;
}

Categories
програмиране софтуер

SHA-1

Безплатна реализация на SHA-1 алгоритъм на C++.

За изтегляне на програмения фрагмент, посетете този адрес:
http://svn.openimageio.org/oiio/trunk/src/include/SHA1.h


/*
100% free public domain implementation of the SHA-1 algorithm
by Dominik Reichl
Web: http://www.dominik-reichl.de/

Version 1.8 - 2008-03-16
- Converted project files to Visual Studio 2008 format.
- Added Unicode support for HashFile utility method.
- Added support for hashing files using the HashFile method that are
larger than 2 GB.
- HashFile now returns an error code instead of copying an error
message into the output buffer.
- GetHash now returns an error code and validates the input parameter.
- Added ReportHashStl STL utility method.
- Added REPORT_HEX_SHORT reporting mode.
- Improved Linux compatibility of test program.

Version 1.7 - 2006-12-21
- Fixed buffer underrun warning that appeared when compiling with
Borland C Builder (thanks to Rex Bloom and Tim Gallagher for the
patch).
- Breaking change: ReportHash writes the final hash to the start
of the buffer, i.e. it's not appending it to the string anymore.
- Made some function parameters const.
- Added Visual Studio 2005 project files to demo project.

Version 1.6 - 2005-02-07 (thanks to Howard Kapustein for patches)
- You can set the endianness in your files, no need to modify the
header file of the CSHA1 class anymore.
- Aligned data support.
- Made support/compilation of the utility functions (ReportHash and
HashFile) optional (useful when bytes count, for example in embedded
environments).

Version 1.5 - 2005-01-01
- 64-bit compiler compatibility added.
- Made variable wiping optional (define SHA1_WIPE_VARIABLES).
- Removed unnecessary variable initializations.
- ROL32 improvement for the Microsoft compiler (using _rotl).

Version 1.4 - 2004-07-22
- CSHA1 now compiles fine with GCC 3.3 under MacOS X (thanks to Larry
Hastings).

Version 1.3 - 2003-08-17
- Fixed a small memory bug and made a buffer array a class member to
ensure correct working when using multiple CSHA1 class instances at
one time.

Version 1.2 - 2002-11-16
- Borlands C++ compiler seems to have problems with string addition
using sprintf. Fixed the bug which caused the digest report function
not to work properly. CSHA1 is now Borland compatible.

Version 1.1 - 2002-10-11
- Removed two unnecessary header file includes and changed BOOL to
bool. Fixed some minor bugs in the web page contents.

Version 1.0 - 2002-06-20
- First official release.

======== Test Vectors (from FIPS PUB 180-1) ========

SHA1("abc") =
A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D

SHA1("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq") =
84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1

SHA1(A million repetitions of "a") =
34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
*/

#ifndef ___SHA1_HDR___
#define ___SHA1_HDR___

#include "export.h"

#if !defined(SHA1_UTILITY_FUNCTIONS) && !defined(SHA1_NO_UTILITY_FUNCTIONS)
#define SHA1_UTILITY_FUNCTIONS
#endif

#if !defined(SHA1_STL_FUNCTIONS) && !defined(SHA1_NO_STL_FUNCTIONS)
#define SHA1_STL_FUNCTIONS
#if !defined(SHA1_UTILITY_FUNCTIONS)
#error STL functions require SHA1_UTILITY_FUNCTIONS.
#endif
#endif

#include

#ifdef SHA1_UTILITY_FUNCTIONS
#include
#include
#endif

#ifdef SHA1_STL_FUNCTIONS
#include
#endif

#ifdef _MSC_VER
#include
#endif

// You can define the endian mode in your files without modifying the SHA-1
// source files. Just #define SHA1_LITTLE_ENDIAN or #define SHA1_BIG_ENDIAN
// in your files, before including the SHA1.h header file. If you don't
// define anything, the class defaults to little endian.
#if !defined(SHA1_LITTLE_ENDIAN) && !defined(SHA1_BIG_ENDIAN)
#define SHA1_LITTLE_ENDIAN
#endif

// If you want variable wiping, #define SHA1_WIPE_VARIABLES, if not,
// #define SHA1_NO_WIPE_VARIABLES. If you don't define anything, it
// defaults to wiping.
#if !defined(SHA1_WIPE_VARIABLES) && !defined(SHA1_NO_WIPE_VARIABLES)
#define SHA1_WIPE_VARIABLES
#endif

#if defined(SHA1_HAS_TCHAR)
#include
#else
#ifdef _MSC_VER
#include
#else
#ifndef TCHAR
#define TCHAR char
#endif
#ifndef _T
#define _T(__x) (__x)
#define _tmain main
#define _tprintf printf
#define _getts gets
#define _tcslen strlen
#define _tfopen fopen
#define _tcscpy strcpy
#define _tcscat strcat
#define _sntprintf snprintf
#endif
#endif
#endif

// Fallback, if no 64-bit support
#ifndef _fseeki64
#define _fseeki64 fseek
#endif
#ifndef _ftelli64
#define _ftelli64 ftell
#endif

///////////////////////////////////////////////////////////////////////////
// Define variable types

#ifndef UINT_8
#ifdef _MSC_VER // Compiling with Microsoft compiler
#define UINT_8 unsigned __int8
#else // !_MSC_VER
#define UINT_8 unsigned char
#endif // _MSC_VER
#endif

#ifndef UINT_32
#ifdef _MSC_VER // Compiling with Microsoft compiler
#define UINT_32 unsigned __int32
#else // !_MSC_VER
#if (ULONG_MAX == 0xFFFFFFFF)
#define UINT_32 unsigned long
#else
#define UINT_32 unsigned int
#endif
#endif // _MSC_VER
#endif // UINT_32

#ifndef INT_64
#ifdef _MSC_VER // Compiling with Microsoft compiler
#define INT_64 __int64
#else // !_MSC_VER
#define INT_64 long long
#endif // _MSC_VER
#endif // INT_64

#ifndef UINT_64
#ifdef _MSC_VER // Compiling with Microsoft compiler
#define UINT_64 unsigned __int64
#else // !_MSC_VER
#define UINT_64 unsigned long long
#endif // _MSC_VER
#endif // UINT_64

///////////////////////////////////////////////////////////////////////////
// Declare SHA-1 workspace

typedef union
{
UINT_8 c[64];
UINT_32 l[16];
} SHA1_WORKSPACE_BLOCK;

class DLLPUBLIC CSHA1
{
public:
#ifdef SHA1_UTILITY_FUNCTIONS
// Different formats for ReportHash
enum REPORT_TYPE
{
REPORT_HEX = 0,
REPORT_DIGIT = 1,
REPORT_HEX_SHORT = 2
};
#endif

// Constructor and destructor
CSHA1();
~CSHA1();

UINT_32 m_state[5];
UINT_32 m_count[2];
UINT_32 m_reserved0[1]; // Memory alignment padding
UINT_8 m_buffer[64];
UINT_8 m_digest[20];
UINT_32 m_reserved1[3]; // Memory alignment padding

void Reset();

// Update the hash value
void Update(const UINT_8* pbData, UINT_32 uLen);

#ifdef SHA1_UTILITY_FUNCTIONS
// Hash in file contents
bool HashFile(const TCHAR* tszFileName);
#endif

// Finalize hash, call before using ReportHash(Stl)
void Final();

#ifdef SHA1_UTILITY_FUNCTIONS
bool ReportHash(TCHAR* tszReport, REPORT_TYPE rtReportType = REPORT_HEX) const;
#endif

#ifdef SHA1_STL_FUNCTIONS
bool ReportHashStl(std::basic_string& strOut, REPORT_TYPE rtReportType =
REPORT_HEX) const;
#endif

bool GetHash(UINT_8* pbDest) const;

private:
// Private SHA-1 transformation
void Transform(UINT_32* pState, const UINT_8* pBuffer);

// Member variables
UINT_8 m_workspace[64];
SHA1_WORKSPACE_BLOCK* m_block; // SHA1 pointer to the byte array above
};

#endif // ___SHA1_HDR___

Categories
програмиране софтуер

Linux Socket Programming – Echo client/server

Демонстрация на програмиране на сокети под Linux. В конкретния случай са реализирани програмните фрагменти на клиент и сървър:

server.c

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<strings.h>
#include<unistd.h>
#include<arpa/inet.h>
#define MAX_CLIENTS 20
#define BUFFER 1024
main(int argc, char **argv)
{
struct sockaddr_in server, client;
int sock, connection, data_len, struct_len = sizeof(struct sockaddr_in);
char data[BUFFER];
if((sock = socket(AF_INET, SOCK_STREAM,0)) == -1)
{
perror("Socket error.");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[1]));
server.sin_addr.s_addr = INADDR_ANY;
bzero(&server.sin_zero,8);
if((bind(sock,(struct sockaddr *)&server,struct_len)) == -1)
{
perror("Bind error.");
exit(-1);
}
if((listen(sock,MAX_CLIENTS)) == -1)
{
perror("Listen error.");
exit(-1);
}
while(1)
{
pid_t pid = fork();
if((connection = accept(sock,(struct sockaddr *)&client,&struct_len)) == -1)
{
perror("Accept error.");
exit(-1);
}
data_len = 1;
while(data_len)
{
data_len = recv(connection, data, BUFFER, 0);
if(data_len)
{
send(connection, data, data_len, 0);
data[data_len] = '\0';
printf("%s",data);
}
}
close(connection);
}
close(sock);
}

client.c

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<strings.h>
#include<arpa/inet.h>
#define ERROR -1
#define BUFFER 1024
main(int argc, char **argv)
{
struct sockaddr_in server;
int sock, len;
char input[BUFFER], output[BUFFER],data[BUFFER];
char *whoami=getlogin();
if((sock = socket(AF_INET, SOCK_STREAM, 0)) == ERROR)
{
perror("Socket error.");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&server.sin_zero, 8);
if((connect(sock,(struct sockaddr *)&server,
sizeof(struct sockaddr_in))) == ERROR)
{
perror("Connect error.");
exit(-1);
}
while(1)
{
fgets(input, BUFFER, stdin);
strcpy(data, whoami);
strcat(data, ": ");
strcat(data, input);
send(sock, data, strlen(data), 0);
len = recv(sock, output, BUFFER, 0);
output[len] = '\0';
printf("Echo: %s",output);
}
close(sock);
}

Categories
бсу програмиране

Ръководство по програмиране на базата на езика C++

Излезе от печат “Ръководство по програмиране на базата на езика C++”. То е предназначено за семинарни упражнения по дисциплината Програмиране изучавана от специалностите: информатика, компютърни системи и технологии, комуникационна техника и компютърни мрежи в Бургаският Свободен Университет.


Categories
програмиране

Полезни ресурси за начинаещите програмисти по C++

Българска асоциация на разработчиците на софтуер
http://www.devbg.org/

Национална академия по разработка на софтуер
http://academy.devbg.org/

Програмиране = Алгоритми++
http://people.ischool.berkeley.edu/~nakov/algoplus/

Мусала Софтуер
http://www.musala.bg/

Уроци по C++
http://uroci.net/uroci/31/C++.html

Categories
.NET Microsoft програмиране

[Hello World] Microsoft Visual C++ 2008 Express Edition

Инструкции за работа с работните среди:

  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ 2008 Express Edition

1. Стартирайте работната среда Microsoft Visual C++

2. Създавайте на нов проект
[ Ctrl+Shift+N ]

3. Изберете: [ CLR Console Application ]
Укажете име на проекта [ Например: Example 1.1 ]

Microsoft Visual C++ 2008 Express Edition (step 1)

4. Напишете кода на програмата

Microsoft Visual C++ 2008 Express Edition (step 2)

5. Компилирайте без Debug
[ Ctrl+F5 ]

6. Стартиране на вашата програма

Microsoft Visual C++ 2008 Express Edition (step 3)

Бургаски Свободен Университет
Програмиране / Обектно Ориентирано Програмиране
© 2008

Categories
.NET Microsoft програмиране софтуер

Програмиране за .NET Framework

Препоръчвам книгата: “Програмиране за .NET Framework”

Автори: Светлин Наков и колектив
Издателство: Faber,2005-2006 г.
ISBN: 954-775-505-6 (том 1)
ISBN: 954-775-672-9; 978-954-775-672-4 (том 2)
Страници: 801 (том 1); 1032 (том 2)
Лиценз: свободен

Книгата е безплатна за изтегляне от интернет и лиценза й позволява използване на материалите в нея с некомерсиална цел.

http://www.devbg.org/dotnetbook/