Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2017, 00:23   #1
holykilla
Пользователь
 
Регистрация: 04.04.2017
Сообщений: 12
Злость Найти студента, имеющего средний балл равный величине, введенной с клавиатуры. Методы поиска: полный перебор и интерполяционный.

Условие:

Создать массив структур с полями согласно варианту. Найти в массиве заданный элемент указанными методами поиска (для упрощения предполагается, что в массиве имеется только один элемент с нужными характеристиками).


Для получения места в общежитии формируется список студентов, который включает ФИО студента, группу, средний балл, доход на члена семьи. Найти студента, имеющего средний балл равный величине, введенной с клавиатуры. Методы поиска: полный перебор и интерполяционный.


Вот мой код:

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <iomanip>
using namespace std;
struct NOTE {
	char fio[20];
	int grup[10];
	int doxod[10];
	float s_b;
} sved[20];
int nElement = -1;
int nElement2 = -1;
int nE = -1;
int P_dv(NOTE* sved, int, float);
int m;
int main()
{
	setlocale(LC_ALL, "RUS");
	int i = 0, n;
	float time,s;
	cout << "Введите количество студентов= "; cin >> n;
	while (i<n)
	{

		printf("Фамилия студента: "); fflush(stdin); scanf("%d", &sved[i].fio);
		printf("Группа: "); fflush(stdin); scanf("%d", sved[i].grup);
		printf("Доход семьи: "); fflush(stdin); scanf("%d", &sved[i].doxod);
		printf("Средний бал:"); fflush(stdin); scanf("%2.3f", &sved[i].s_b);
			
		i++;
	}
	cout << "\tсписок студентов:" << endl;
	cout << "-----------------------------------------------------------------------" << endl;
	for (i = 0; i<n; i++)
	{
		cout << "Фамилия студента: " << sved[i].fio;
		printf("|Группа: - %d\tДоход семьи:- %d\tСредний бал - %2.2f|\n",  sved[i].grup, sved[i].doxod, sved[i].s_b);
		cout << endl;
	}
	cin >> time;

	cout << "------------------------------------------------------------------------" << endl;
	cout << "\t-------Линейный-------" << endl;
	for (i = 0; i < n; i++)
	{
		if (sved[i].s_b == time)  nElement = i;  else nElement = -1;
		if (nElement != -1)
		{
			cout << "Фамилия студента: " << sved[i].fio;
			printf("|Группа: - %10s\tДоход семьи:- %d\tСредний бал - %2.3f|\n", sved[i].grup, sved[i].doxod, sved[i].s_b);
			cout << endl;
		}
	}
	cout << "\t-------Интерполяционный-------" << endl;
	nE = P_dv(sved, n, time);
	cout << "nE = " << nE << endl;
	if (sved[m].s_b == time)  nElement2 = i;  else nElement2 = -1;
	if (nE != -1)
	{
		cout << "Фамилия студента: " << sved[m].fio;
		printf("|Группа: - %10s\tДоход семьи:- %d\tСредний бал - %2.3f|\n", sved[m].grup, sved[m].doxod, sved[m].s_b);
		cout << endl;
	}
	_getch();
	return 0;
}
int P_dv(NOTE* sved, int n, float time)
{
	int j = n - 1, i = 0;
	while (i<j)
	{
		if (sved[i].s_b == sved[j].s_b)
			if (sved[i].s_b == time) return i; else return -1;
		m = i + (j - 1) * (time - sved[i].s_b) / (sved[j].s_b - sved[i].s_b);
		if (sved[m].s_b == time) return m;
		j++;
	}
}
Не работает, весь день сижу ничего не могу исправить, а послезавтра сдавать лабы!(
holykilla вне форума Ответить с цитированием
Старый 26.12.2017, 01:18   #2
holykilla
Пользователь
 
Регистрация: 04.04.2017
Сообщений: 12
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <iomanip>
using namespace std;
struct NOTE {
	int reis;
	int n_grup;
	char fio_student[20];
	int Doxod;
	float sredball;
} sved[20];
int nElement = -1;
int nElement2 = -1;
int nE = -1;
int P_dv(NOTE* sved, int, float);
int m;
int main()
{
	setlocale(LC_ALL, "RUS");
	int i = 0, n;
	float sb;
	cout << "Введите количество студентов = "; cin >> n;
	while (i<n)
	{

		printf("Номер группы: "); fflush(stdin); scanf("%d", &sved[i].n_grup);
		printf("Фамилия студента: "); fflush(stdin); scanf("%s", sved[i].fio_student);
		printf("Доход на члена семьи: "); fflush(stdin); scanf("%d", &sved[i].Doxod);
		printf("Средний бал: "); fflush(stdin); scanf("%f", &sved[i].sredball);
		i++;
	}
	cout << "\tсписок рейсов:" << endl;
	cout << "-----------------------------------------------------------------------" << endl;
	for (i = 0; i<n; i++)
	{ // \tДоход на члена семьи - %d
		cout << "№ группы: " << sved[i].n_grup;
		printf(" || Фамилия студента - %s || Средний бал - %3.1f ||", sved[i].fio_student, sved[i].sredball);
		cout << " Доход на члена семьи -" << sved[i].Doxod << endl;
		cout << endl;
	}
	cout << "Введите средний бал:";
	scanf("%f", &sb);
	cout << "------------------------------------------------------------------------" << endl;
	cout << "\t-------Линейный-------" << endl;
	for (i = 0; i < n; i++)
	{
		if (sved[i].sredball == sb)  nElement = i;  else nElement = -1;
		if (nElement != -1)
		{
			cout << "№ группы: " << sved[i].n_grup;
			printf(" || Фамилия студента - %s || Средний бал - %3.1f ||", sved[i].fio_student, sved[i].sredball);
			cout << " Доход на члена семьи -" << sved[i].Doxod << endl;
			cout << endl;
		}
	}
	cout << "\t-------Интерполяционный-------" << endl;
	nE = P_dv(sved, n, sb);
	cout << "nE = " << nE << endl;
	if (sved[m].sredball == sb)  nElement2 = i;  else nElement2 = -1;
	if (nE != -1)
	{
		cout << "№ группы: " << sved[m].n_grup;
		printf(" || Фамилия студента - %s || Средний бал - %3.1f ||", sved[m].fio_student, sved[m].sredball);
		cout << " Доход на члена семьи -" << sved[m].Doxod << endl;
		cout << endl;
	}
	_getch();
	return 0;
}
int P_dv(NOTE* sved, int n, float sb)
{
	int j = n - 1, i = 0;
	while (i<j)
	{
		if (sved[i].sredball == sved[j].sredball)
			if (sved[i].sredball == sb) return i; else return -1;
		m = i + (j - 1) * (sb - sved[i].sredball) / (sved[j].sredball - sved[i].sredball);
		if (sved[m].sredball == sb) return m;
		j++;
	}
}
Смог чутка переделать,но все ровно выдает сбой ошибку в
Код:
iint P_dv(NOTE* sved, int n, float sb)
{
	int j = n - 1, i = 0;
	while (i<j)
	{
		if (sved[i].sredball == sved[j].sredball)
			if (sved[i].sredball == sb) return i; else return -1;
		m = i + (j - 1) * (sb - sved[i].sredball) / (sved[j].sredball - sved[i].sredball);
		if (sved[m].sredball == sb) return m;
		j++;
	}
}

Последний раз редактировалось holykilla; 26.12.2017 в 01:23.
holykilla вне форума Ответить с цитированием
Старый 26.12.2017, 13:59   #3
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Посмотрите на свои условия
Код:
int j = n - 1, i = 0;
	while (i<j)
{
.....

j++;
}
У Вас i всегда будет меньше j.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверьте код, пожалуйста: Список студентов, который включает ФИО студента, группу, средний балл, доход на члена семьи. Вывести список очередности предоставления мест в общежитии alina999 Общие вопросы C/C++ 2 14.04.2017 17:02
Средний балл. Паскаль. Brain1ess Помощь студентам 2 11.06.2015 10:25
определить средний балл каждого студента Zzoyberg Помощь студентам 1 15.12.2011 20:21
Структуры. Опр. средний балл toy Общие вопросы C/C++ 1 19.05.2010 08:49
Средний балл KORT Общие вопросы C/C++ 3 27.02.2008 17:04