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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Program has stopped working

Featured Replies

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

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

Случва се от скоро, когато я предавах не правеше такива проблеми. Единственото което съм правил с нея от тогава е да я преместя от десктоп-а в отделна папка.

#include <fstream> // za failove
#include <iostream> 
#include <cstdlib> 
#include <string> 


using namespace std;
const int N = 20; // vuvejda broi korabi do 20
const char Name[] = "my.dat"; // ime na faila

struct korab // deklarira struktura korab
{
	char brkonteineri[20]; // broi konteineri
	char korabime[20]; // ime na korab
	char marshrut[20]; // marshrut
	char imenakapitan[15]; // ime na kapitan
	float prihodi; // prihodi
    string  nachalnadata; // nachalna data
	string krainadata; // kraina data
};
fstream fp; // ukazatel za faila
int n; // broi korabi

void create(korab st[]) // funkciq za zapisvane vuv fail
{
	int i;
	do {
		cout << "\n Broi korabi:";
		cin >> n;
	} while (n<1 || n>N); // N - broi korabi
	fp.open(Name, ios::binary | ios::out); // dvoichen fail, otvarqne
	if (!fp) { cout<< endl << "Error"; exit(1); } 
	for (i = 0; i<n; i++)
	{
		fflush(stdin); 
		cout << "\n Ime na korab:"; cin >> st[i].korabime;
		cout << "\n Ime na kapitan:"; cin >> st[i].imenakapitan;
		cout << "\n Broi konteineri:"; cin >> st[i].brkonteineri;
		cout << "\n Marshrut:"; cin >> st[i].marshrut;
		cout << "\n Data na trugvane:"; cin >> st[i].nachalnadata;
		cout << "\n Data na pristigane:"; cin >> st[i].krainadata;
		cout << "\n Prihodi:"; cin >> st[i].prihodi;
	}
	fp.write((char*)st, n * sizeof(korab)); // zapis na masiva vuv fail
	fp.close(); // krai na funkciqta
}



void output(korab st[]) // funkciq za izvejdane
{
	long int pos, i;
	korab s;
	cout << "\n Izvejdane  na vuvedenite korabi\n";
	fp.open(Name, ios::binary | ios::in);
	if (!fp) { cout << endl << "Error"; exit(1); }
	fp.seekg(0L, ios::end);
	pos = fp.tellg();
	fp.close();
	fp.open(Name, ios::binary | ios::in);
	if (!fp) { cout << endl << "Error"; exit(1); }
	for (i = 0; i < pos / (sizeof(korab)); i++)
	{
		fp.read((char*)&s, sizeof(korab));
		st[i] = s;
		cout << "\n Ime na korab:" << st[i].korabime;
		cout << "\n Ime na kapitan:" << st[i].imenakapitan;
		cout << "\n Broi konteineri:" << st[i].brkonteineri;
		cout << "\n Marshrut:" << st[i].marshrut;
		cout << "\n Data na trugvane:" << st[i].nachalnadata;
		cout << "\n Data na pristigane:" << st[i].krainadata;
		cout << "\n Prihodi:" << st[i].prihodi;

	}
	fp.close();
}

void search(korab st[]) // tursi korab po ime
{
	char korabime[20];
	long int pos, i, k = 0;
	korab s;
	cout << "\n Tursene na korab po ime:";
	cin >> korabime;
	fp.open(Name, ios::binary | ios::in);
	if (!fp) { cout << endl << "Error"; exit(1); }
	fp.seekg(0L, ios::end); //premestva ukazatelq na faila v kraq na poziciqta
	pos = fp.tellg(); // opredelq duljinata na faila v baitove
	fp.close();
	fp.open(Name, ios::binary | ios::in);
	if (!fp) { cout << endl << "Error"; exit(1); }
	for (i = 0; i < pos / (sizeof(korab)); i++)
	{
		fp.read((char*)&s, sizeof(korab)); // chete dannite ot faila
		st[i] = s;
		if (strcmp(st[i].korabime, korabime) == 0)
		{
			cout << "\n Broi konteineri:" << st[i].brkonteineri;
			cout << "\n Ime na kapitan:" << st[i].imenakapitan;
			cout << "\n Marshrut:" << st[i].marshrut;
			cout << "\n Data na pristigane:" << st[i].nachalnadata;
			cout << "\n Data na trugvane:" << st[i].krainadata;
			cout << "\n Prihodi:" << st[i].prihodi;
			k++;
		}
	}
	if (k == 0) {
		cout << "\n Ne e nameren korab \n"; exit(1);
	}
	fp.close();
}

void main()
{
	struct korab st[N];
	int ch;
	do {
		cout << "\n 1.Suzdavane na file grupa ot korabi";
		cout << "\n 2. Izvejdane na vuvedenite korabi";
		cout << "\n 3. Tursene na korab po ime";
		cout << "\n 4. Exit";
		do {
			cout << "\n Izberete:"; cin >> ch;
		} while (ch < 1 || ch>4);
		switch (ch)
		{
		case 1: create(st); break;
		case 2: output(st); break;
		case 3: search(st); break;
		}
	} while (ch != 4);
}

 

Screenshot_2.png

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

struct korab // deklarira struktura korab
{
	char brkonteineri[20]; // broi konteineri
	char korabime[20]; // ime na korab
	char marshrut[20]; // marshrut
	char imenakapitan[15]; // ime na kapitan
	float prihodi; // prihodi
	char  nachalnadata[20]; // nachalna data
	char krainadata[20]; // kraina data
};

Структури не знаеш да пишеш. Смени твоята структура с тази, без да променяш нищо друго. И пробвай. 

Като смесваш С стрингове със С++ STL стрингове и става салата. Чисто логически.

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

  • Автор
преди 13 часа, Реджеп Иведик написа:

struct korab // deklarira struktura korab
{
	char brkonteineri[20]; // broi konteineri
	char korabime[20]; // ime na korab
	char marshrut[20]; // marshrut
	char imenakapitan[15]; // ime na kapitan
	float prihodi; // prihodi
	char  nachalnadata[20]; // nachalna data
	char krainadata[20]; // kraina data
};

Структури не знаеш да пишеш. Смени твоята структура с тази, без да променяш нищо друго. И пробвай. 

Като смесваш С стрингове със С++ STL стрингове и става салата. Чисто логически.

Благодаря ти, ще прочета повече за структурите, освен това - каква е причината да не се ползва int за начална и крайна дата? Ако асистента ме накара да добавя функция, примерно за пресмятане на най-дълъг превоз, това че в структурата не съм ползвал int няма ли да доведе до проблеми? - все пак вкарвам числа?

 

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

преди 4 часа, blodwenn написа:

Благодаря ти, ще прочета повече за структурите, освен това - каква е причината да не се ползва int за начална и крайна дата? Ако асистента ме накара да добавя функция, примерно за пресмятане на най-дълъг превоз, това че в структурата не съм ползвал int няма ли да доведе до проблеми? - все пак вкарвам числа?

 

Ами, нямаш изчисления с дати, а стринг е по лесно. С едно въвеждане се въвеждат включително и наклонените чертички или точките, с които потребителя ще реши да раздели деня от месеца от годината.

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

преди 4 часа, blodwenn написа:

ще прочета повече за структурите

Всъщност на С++ те са класове. Много има за четене. Разликата между структура и клас в С++ е само в достъпа по подразбиране до променливите и функциите (методите) на класа (структурата).

  • Автор
преди 21 часа, Реджеп Иведик написа:

Ами, нямаш изчисления с дати, а стринг е по лесно. С едно въвеждане се въвеждат включително и наклонените чертички или точките, с които потребителя ще реши да раздели деня от месеца от годината.

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

Всъщност на С++ те са класове. Много има за четене. Разликата между структура и клас в С++ е само в достъпа по подразбиране до променливите и функциите (методите) на класа (структурата).

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

преди 7 часа, blodwenn написа:

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

Виж <ctime>.

Имаш там функции, да ти изкарат всяка дата и час на какво разстояние (по време) са от епохалната дата. После намираш разликата и превръщаш в месеци и дни.

 

#include <stdio.h>
#include <time.h>




int main()
{
	int startyear, startmonth, startday;
	int endyear, endmonth, endday;
	time_t rawtime;
	struct tm ini;
	struct tm fini;
	printf("Enter start year: "); fflush(stdout); scanf("%d", &startyear);
	printf("Enter start month: "); fflush(stdout); scanf("%d", &startmonth);
	printf("Enter start day: "); fflush(stdout); scanf("%d", &startday);
	printf("Enter end year: "); fflush(stdout); scanf("%d", &endyear);
	printf("Enter end month: "); fflush(stdout); scanf("%d", &endmonth);
	printf("Enter end day: "); fflush(stdout); scanf("%d", &endday);
	time(&rawtime);
	ini = *localtime(&rawtime);
	ini.tm_year = startyear - 1900;
	ini.tm_mon = startmonth - 1;
	ini.tm_mday = startday;
	fini = *localtime(&rawtime);
	fini.tm_year = endyear - 1900;
	fini.tm_mon = endmonth - 1;
	fini.tm_mday = endday;
	printf("The difference in time is %u days", (unsigned int)difftime(mktime(&fini), mktime(&ini))/60/60/24);
	return 0;
}

 

Излезе, че има и функция difftime и не ти трябва да знаеш за епохи мепохи.

Ама трябва да знаеш, щото ако те питат туй 1900 откъде идва, влизаш в киреча

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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