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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

помощ за задача

Featured Replies

За група от M студента за зададени оценките по 5 дисциплини .Да се състави алгоритъм и напише програма за намиране на най-често срещаната оценка на всеки студент от групата.

Стигнал съм то тук.Но програмата работи само ако съм въвел 1 студент ,ако пробвам 2 или повече изважда грешен отговор.

#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int main() {
    int m;
    float a[5];
    cout << "Broi na studentite: "; cin >> m;

    for (int i = 0; i < m; i++) {
        cout << i << "-i student\n";
        for (int d = 0; d < 5; d++) {
            cout <<"vuvedete ocenkite : "; cin>>a[d];
        }
    }
    
    int max_count = 0;

    for (int i = 0; i < m; i++)
    {
        int count = 1;
        for (int d = i+1; d < 6; d++)
            if (a == a[d])
                count++;
        if (count > max_count)
            max_count = count;
    }

    for (int i = 0; i < m; i++)
    {
        int count = 1;
        for (int d = i+1; d < 6; d++)
            if (a == a[d])
                count++;
        if (count == max_count)
            for (int i = 0; i < m; i++) cout << '\t' << i << "-i student: " << a << endl;
    }
    _getch();
}

Ползвай тага за код изглежда като <> защото така като гледам има липси в програмата ти. Предполагам от това , че си я постнал дирекно като обикновен текст

  • Автор
#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int main() {
    int m;
    float a[5];
    cout << "Broi na studentite: "; cin >> m;

    for (int i = 0; i < m; i++) {
        cout << i << "-i student\n";
        for (int d = 0; d < 5; d++) {
            cout <<"vuvedete ocenkite : "; cin>>a[d];
        }
    }
    
    int max_count = 0;

    for (int i = 0; i < m; i++)
    {
        int count = 1;
        for (int d = i+1; d < 6; d++)
            if (a == a[d])
                count++;
        if (count > max_count)
            max_count = count;
    }

    for (int i = 0; i < m; i++)
    {
        int count = 1;
        for (int d = i+1; d < 6; d++)
            if (a == a[d])
                count++;
        if (count == max_count)
            for (int i = 0; i < m; i++) cout << '\t' << i << "-i student: " << a << endl;
    }
    _getch();
}

 

Продължават да ти липсват части от програмата, но на пръв поглед - използваш един и същи масив а[5] за всички студенти, което няма как да ти даде верен отговор освен ако броя на студентите не е 1.

За оценките ползваш същата променлива a[d]. Използвай за оценките примерно b[a,k] където к е от 1 до 5

  • Автор

разбрах кое липсва ето така тръгва само че пак нестава за повече от 1 студент

#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int main() {
	int m;
	float a[5];
	cout << "Broi na studentite: "; cin >> m;

	for (int i = 0; i < m; i++) {
		cout << i << "-i student\n";
		for (int d = 0; d < 5; d++) {
			cout << "vuvedete ocenkite : "; cin >> a[d];
		}
	}

	int max_count = 0;

	for (int i = 0; i < m; i++)
	{
		int count = 1;
		for (int d = i + 1; d < 6; d++)
			if (a[i] == a[d])
				count++;
		if (count > max_count)
			max_count = count;
	}

	for (int i = 0; i < m; i++)
	{
		int count = 1;
		for (int d = i + 1; d < 6; d++)
			if (a[i] == a[d])
				count++;
		if (count == max_count)
			for (int i = 0; i < m; i++) cout << '\t' << i << "-i student: " << a[i] << endl;
	}
	_getch();
}

 

Ми няма как да стане като ползваш само един масив - или за всеки студент трябва да има такъв или правиш двумерен с размерностти броя на студентите и броя на оценките.

  • Автор
на 30.11.2019 г. в 18:07, ined написа:

Ми няма как да стане като ползваш само един масив - или за всеки студент трябва да има такъв или правиш двумерен с размерностти броя на студентите и броя на оценките.

добре стигнах до тук и пак не ми излиза вярно къде ми е грешката?

#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int main() {
	int m,i,d;
	int oc = 5;
	float a[50][50];
	cout << "Broi na studentite: "; cin >> m;
	cout << "Vuvedete ocenkite na studentite:";
	for (i = 0; i < m; i++){
		for (d = 0; d < oc; d++) 
		{
			cin >> a[i][d];
		}
	}

	int max_count = 0;

	for ( i = 0; i < m; i++)
	{
		int count = 1;
		for (d =0; d < oc; d++)
			if (a[i] == a[d])
				count++;
		if (count > max_count)
			max_count = count;
	}

	for ( i = 0; i < m; i++)
	{
		int count = 1;
		for (d=0; d < oc; d++)
			if (a[i] == a[d])
				count++;
		if (count == max_count)
			for (i = 0; i < m; i++) 
				cout << '\t' << i << "-i student: " << a[i] << endl;
	}
	_getch();
}

 

Здравей,
имаш грешки в логиката и като цяло не си се запознал с двумерните масиви.
Ето кода от горният пост с коментари ми:

int main() {
	int m,i,d;
	int oc = 5;
	float a[50][50];
	/*
		Препоръка за подобрение: Използвай променливи за дефиниране на масива. 
		Примерно за дефинирането попитай потребителя за броя студенти и съхрани 
		броят във променлива примерно students и след това го декларирай така:
		a[students][5]; Като за броят оценки може друга променлива.
		
		Допълнително, предвид, че (до колкото разбрах) се търси модата на оценките,
		които са целочислени, няма смисъл двумерният масив да е float. Ако оценките не
		са цели ще изисква да се направи по-различно, а ти си почнал като за целочислени.
	*/
	cout << "Broi na studentite: "; cin >> m;
	cout << "Vuvedete ocenkite na studentite:";
	for (i = 0; i < m; i++){
		for (d = 0; d < oc; d++) 
		{
			cin >> a[i][d];
		}
	}

	int max_count = 0;

	for ( i = 0; i < m; i++)
	{	
		int count = 1;
		for (d =0; d < oc; d++) //Цикъл през всички оценки, добре до тук.
			if (a[i] == a[d]) 
			/* 
				Е това условие if няма смисъл. Първият израз на масива ти показва 
				за кой студент е и няма стойност. Сравняваш дали първият студент а[0]
				e равен на първият а[0] и след това се променя дали а[0] е равно на 
				а[1],2,3... А то реално сравняваш hex защото това ще излезе за а[0]
				при двумерен масив... Трябва да ти е a[i][d] == a[i][d+1]
			*/
				count++;
		if (count > max_count)
			max_count = count;
	}

	/*
		Отново същият цикъл по-долу? Но извеждаш "нещото"...
		По-ясно ще е да съхрянваш модата в отделна променлива.
	*/
	for ( i = 0; i < m; i++)
	{
		int count = 1;
		for (d=0; d < oc; d++)
			if (a[i] == a[d])
				count++;
		if (count == max_count)
			for (i = 0; i < m; i++) // И този цикъл е за...? Вече си в него... 
				cout << '\t' << i << "-i student: " << a[i] << endl; 
				// както казах, ще излезе hex...Предполагам вместо a[i] трябва да е резултата/модата.
	}
	_getch();
}

Ето моята редакция на програмата. Надявам се, няма да копираш, поставиш и забравиш.

#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int main() {
	int m,i,d;
	int oc = 5;
	cout << "Broi na studentite: "; cin >> m;
	int a[m][oc];
	for (i = 0; i < m; i++){
		// 	Съобщението се показва за всеки студент, да се знае кога свършва 
		//  въвеждането на оценките за даден студент.
		cout << "Vuvedete ocenkite na "<< i <<" student:";
		for (d = 0; d < oc; d++) 
		{
			cin >> a[i][d];
		}
	}


	int max_count = 0;
	/* 
	Извадил съм декларацията на count от цикъла и съм добавил
	променливата mode
	*/
	int count = 1;
	int mode = a[0][0];

	for ( i = 0; i < m; i++)
	{
		max_count = 0;
		count = 1;
		mode = a[i][0];
		for (d = 0; d < oc; d++)
	    {
	    	// Сравнявам сегашната оценка със следващата
	       if ( a[i][d] == a[i][d+1] )
	       {
	          count++;
	          if ( count > max_count )
	          {
	              max_count = count;
	              mode = a[i][d];
	          }
	       } else
	          count = 1;
	    }
	    cout << '\t' << i << "-i student: " << mode << endl;
	}
	_getch();
}

Успешно показва резултата за всеки студент. Ето примерен резултат на програмата:

Broi na studentite: 3
Vuvedete ocenkite na 0 student:2 3 3 4 5
Vuvedete ocenkite na 1 student:6 5 4 2 6
Vuvedete ocenkite na 2 student:5 3 2 2 6
        0-i student: 3
        1-i student: 6
        2-i student: 2

Вече от теб зависи да направиш по-добър интерфейс. Надявам се съм разбрал какво се изисква от задачата. Успех!

  • Автор
преди 1 час, Random Person написа:

Здравей,
имаш грешки в логиката и като цяло не си се запознал с двумерните масиви.
Ето кода от горният пост с коментари ми:


int main() {
	int m,i,d;
	int oc = 5;
	float a[50][50];
	/*
		Препоръка за подобрение: Използвай променливи за дефиниране на масива. 
		Примерно за дефинирането попитай потребителя за броя студенти и съхрани 
		броят във променлива примерно students и след това го декларирай така:
		a[students][5]; Като за броят оценки може друга променлива.
		
		Допълнително, предвид, че (до колкото разбрах) се търси модата на оценките,
		които са целочислени, няма смисъл двумерният масив да е float. Ако оценките не
		са цели ще изисква да се направи по-различно, а ти си почнал като за целочислени.
	*/
	cout << "Broi na studentite: "; cin >> m;
	cout << "Vuvedete ocenkite na studentite:";
	for (i = 0; i < m; i++){
		for (d = 0; d < oc; d++) 
		{
			cin >> a[i][d];
		}
	}

	int max_count = 0;

	for ( i = 0; i < m; i++)
	{	
		int count = 1;
		for (d =0; d < oc; d++) //Цикъл през всички оценки, добре до тук.
			if (a[i] == a[d]) 
			/* 
				Е това условие if няма смисъл. Първият израз на масива ти показва 
				за кой студент е и няма стойност. Сравняваш дали първият студент а[0]
				e равен на първият а[0] и след това се променя дали а[0] е равно на 
				а[1],2,3... А то реално сравняваш hex защото това ще излезе за а[0]
				при двумерен масив... Трябва да ти е a[i][d] == a[i][d+1]
			*/
				count++;
		if (count > max_count)
			max_count = count;
	}

	/*
		Отново същият цикъл по-долу? Но извеждаш "нещото"...
		По-ясно ще е да съхрянваш модата в отделна променлива.
	*/
	for ( i = 0; i < m; i++)
	{
		int count = 1;
		for (d=0; d < oc; d++)
			if (a[i] == a[d])
				count++;
		if (count == max_count)
			for (i = 0; i < m; i++) // И този цикъл е за...? Вече си в него... 
				cout << '\t' << i << "-i student: " << a[i] << endl; 
				// както казах, ще излезе hex...Предполагам вместо a[i] трябва да е резултата/модата.
	}
	_getch();
}

Ето моята редакция на програмата. Надявам се, няма да копираш, поставиш и забравиш.


#include<iostream>
#include<stdlib.h>
#include<conio.h>
using namespace std;
int main() {
	int m,i,d;
	int oc = 5;
	cout << "Broi na studentite: "; cin >> m;
	int a[m][oc];
	for (i = 0; i < m; i++){
		// 	Съобщението се показва за всеки студент, да се знае кога свършва 
		//  въвеждането на оценките за даден студент.
		cout << "Vuvedete ocenkite na "<< i <<" student:";
		for (d = 0; d < oc; d++) 
		{
			cin >> a[i][d];
		}
	}


	int max_count = 0;
	/* 
	Извадил съм декларацията на count от цикъла и съм добавил
	променливата mode
	*/
	int count = 1;
	int mode = a[0][0];

	for ( i = 0; i < m; i++)
	{
		max_count = 0;
		count = 1;
		mode = a[i][0];
		for (d = 0; d < oc; d++)
	    {
	    	// Сравнявам сегашната оценка със следващата
	       if ( a[i][d] == a[i][d+1] )
	       {
	          count++;
	          if ( count > max_count )
	          {
	              max_count = count;
	              mode = a[i][d];
	          }
	       } else
	          count = 1;
	    }
	    cout << '\t' << i << "-i student: " << mode << endl;
	}
	_getch();
}

Успешно показва резултата за всеки студент. Ето примерен резултат на програмата:

Broi na studentite: 3
Vuvedete ocenkite na 0 student:2 3 3 4 5
Vuvedete ocenkite na 1 student:6 5 4 2 6
Vuvedete ocenkite na 2 student:5 3 2 2 6
        0-i student: 3
        1-i student: 6
        2-i student: 2

Вече от теб зависи да направиш по-добър интерфейс. Надявам се съм разбрал какво се изисква от задачата. Успех!

мерси много за коментарите

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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