Премини към съдържанието
  • Добре дошли!

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

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

     

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


Препоръчан отговор

За група от 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

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

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

Линк към коментара
Сподели в други сайтове

Добавете отговор

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

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване