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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Курсова работа C++

Featured Replies

Моля за помощ, а ето я и задачата:

През месец април метеоролог аз астрономическата обсерватория „Вежен” записвал температурата на въздуха на всеки кръгъл час от денонощието. Да се създаде програма която:

-         въвежда информация за месеца;

-         намира средната температура за всяко денонощие;

-         намира най-топлото денонощие;  

Как трябва да се реализира тази задача? Стойностите да се въведат в масив, който да се обходи с цикъл според мен е вариант. После стойностите се събират и делят на 24. Там имаш средна дневна температура. Като изчислиш за всяко денонощие каква е средната температура, можеш да намериш и кое ще е най-топлото. Резултатите ще трябва да вкараш в променливи, които са наименувани като дните от месеца и после ми идва на ум да го направиш със сравнения и IF-ове. Дебилистично е, но за това се сещам. В Интернет има примери как се прави.

п.п Защо масив? Сигурно можеш да ползваш и 24х30 променливи + 30 променливи, но сигурно ще луднеш. :D

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

Резултатите ще трябва да вкараш в променливи, които са наименувани като дните от месеца и после ми идва на ум да го направиш със сравнения и IF-ове. Дебилистично е, но за това се сещам. В Интернет има примери как се прави.

Що пък да не ползва масив за това? 30 променливи???

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

Що пък да не ползва масив за това? 30 променливи???

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

Ако имаш друга идея - пишеш. Аз бегло наметнах един възможен вариант.

Възможно е да се създаде масив, стойностите на първият да се копират и във втори масив, с който да се извърши подреждане и после най-голямата стойност от вторият да се запише в променлива, да се използва цикъл, с който да се сравнява най-високата стойност с всеки елемент и ако е равна на него, то да се извежда съответният елемент и индекса, но ми се вижда доста по-сложно. По-просто не го измислих.

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

Дефинираш структура за всеки ден, в която има масив от измерените температури и средната за деня. Правиш за месеца масив от дневни структури и си правиш операциите върху тях. Елементарна е програмата. Ето ти началото: 

#define MAX_DAYS 31
#define HOURS 24

typedef struct {
    float temp[HOURS];
    float avg_temp;
} DayTemp;

DayTemp april[MAX_DAYS];

Като индексирането е от 0. Тоест първия ден от месеца е с индекс 0, последния в случая на април е 29. 

 

Сега видях, че даже се иска C++. На C++ можеш да дефинираш клас вместо структура за деня. Операциите ще са като методи и ще имаш масив от обекти за месеца. Пробвай сам да направиш нещо, дали ще е C, C++ все тая.

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

Дефинираш структура за всеки ден, в която има масив от измерените температури и средната за деня. Правиш за месеца масив от дневни структури и си правиш операциите върху тях. Елементарна е програмата. Ето ти началото:

Много вероятно е още да не са взели класове. Използването на структура как по-точно опростява нещата според теб? Как ще сравни елементите avg_temp на 31 структури, които включват по 2 масива, ще намери максималният и ще изведе деня от месеца, когато е била максималната стойност? Да не изглежда, че те подлагам на съмнение, интересно ми е как конкретно би го реализирал ти.

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

Ех, сравнението се прави в цикъл с една помощна променлива, която държи текущия максимум. Примерно: 

int get_max(DayTemp * month, int days) {
    float max_temp = -200;
    int i, k;
    for (i = 0; i < days; i++) {
        if (month[i].avg_temp > max_temp) {
            max_temp = month[i].avg_temp;
            k = i;
        }
    }
    return k;
}

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

 

Какво значи не са взели класове? Преди да се започне с изучаването на C++ би следвало да са минали през C, тоест класовете биха били едно от първото нещо, което ще вземат. 

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

Много вероятно е още да не са взели класове. Използването на структура как по-точно опростява нещата според теб? Как ще сравни елементите avg_temp на 31 структури, които включват по 2 масива, ще намери максималният и ще изведе деня от месеца, когато е била максималната стойност? Да не изглежда, че те подлагам на съмнение, интересно ми е как конкретно би го реализирал ти.

int max = 0;
for(int i = 1; i < 31; i++) {
   if(days[i].avg > days[max].avg) { 
       max = i;
   }
}

std::cout << "Day " << max + 1 << " was the hottest with average temperature of " << days[max].avg;

Примерно?

Какво значи не са взели класове? Преди да се започне с изучаването на C++ би следвало да са минали през C, тоест класовете биха били едно от първото нещо, което ще вземат. 

+1, да учиш C++ без да вземеш класове е като да учиш алгебра без да вземеш уравнения, фундаментална част са.

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

#include <iostream>
using namespace std;

int main(){
int i,j,t,max,sum,dni;

cout<<"Vuvedi broi dni"<<endl;
cin>>dni;
for(;{
	if(dni>=1 && dni<=30){
		break;
	}
	else{
		cout<<"Vuvedete korektni dni:"<<endl;
		cin>>dni;
	}
}

double array[dni];

for(i=1;i<=dni;i++){
	sum=0;
	for(j=1;j<=24;j++){
		cout<<"Vuvedi temperatura za:"<<i<<" April,"<<j<<"h"<<endl;
		cin>>t;
		for(;{
			if(t>=-15 && t<=15){
				break;
			}
			else{
				cout<<"Vuvedete korektna temperatura:"<<endl;
				cin>>t;
			}
		}
		sum=sum+t;
	}
array[i] = sum/24;
cout<<"Srednata temperatura za:"<<i<<" April e:"<<array[i]<<"C"<<endl;
}

max = array[0];
for(i=0;i<=dni;i++){
	if(max < array[i]){
		max = array[i];
		j=i;
	}
}
cout<<"Nai toploto denonoshtie e:"<<j<<" April "<<max<<"C"<<endl;
return 0;
}

Абе и без класове и STL ставало :)

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

Ще го компилира тогава с любителския :)  Иначе да, не печели кой знае колко памет спрямо

double array[31], че да се налага използването на код който няма да върви на всеки компилатор.

 

И не разбрах защо ограничава температурата само от -15 до +15 градуса

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

Ще го компилира тогава с любителския :)  Иначе да, не печели кой знае колко памет спрямо

double array[31], че да се налага използването на код който няма да върви на всеки компилатор.

 

И не разбрах защо ограничава температурата само от -15 до +15 градуса

 

Приема за истина, че температурата през април на това конкретно географско място се изменя строго в интервала -15 / +15 градуса по Целзий.

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

Да де, ама в момента моя показва 22.6 градуса на сянка.

 

Казват, че Господ най силно се смеел, когато човек се опита да го ограничи в интервал.

  • Автор

Благодаря ви! Работя с Microsoft Visual C++ 2006 и ми излизат следните грешки:

 

double array[dni];

 

error C2057: expected constant expression

error C2466: cannot allocate an array of constant size 0
error C2133: 'array' : unknown size

error C2057: expected constant expression

Както отбеляза maxim4o, деклариране на масив с променлива за брой елементи не е по стандарт и не се подържа от всички компилатори. За да e портваемо или трябва да използваш истински динамичен масив с new[] (или вектор) или да си зададеш фиксиран размер на масива както предложи ined.

Абе и без класове и STL ставало :)

Ми напиши я на асемблер :D

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

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

 

Криско се молил на Господ. 

- Моля те Господи направи ме инженер. 

Господ му отвърнал: 

- Ще те направя педераст, понеже е по-лесно да ти влезе нещо в г*за отколкото в главата. 

Само кусури намирате на g++ компилаторчето :D , задачката докът дремя я нащраках, ама щом хванала дикиш .... дабъл масива го оставих за размисъл сред си плюплюсчиите :D

  • Автор

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

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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