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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2021, 17:53   #1
Tat0107
Новичок
Джуниор
 
Регистрация: 20.03.2021
Сообщений: 5
По умолчанию Почему выводится неправильное значение в textbox?

Программа неправильно считает ср. арифм положит элементов массива и индекс ближайшего к ср арифм элемента.
Код:
#pragma endregion

	private: System::Void cmdTask_Click(System::Object^  sender, System::EventArgs^  e) 
			 {
				 const int N = 100;
				 int mas1[N], mas2[N];
				 int n1, n2;
				 int a, b;
				
				 int ind;
				 float sr;
			
				
				 txtSr->Text=sr.ToString();
				 txtInd->Text=ind.ToString();
				 lstMas1->Items->Clear();
				 lstMas2->Items->Clear();
				
				 if(!GetInt(N,txtN,"Введите число эл-тов массива 1<=n<=100",n1))return;
				 if(!GetInt(10000,txtB,"Введите b-конеч. знач. отрезка 1<=b<=10000",b))return;
				 if(!GetInt(b,txtA,"Введите a-нач. знач. отрезка 1<=a<=b",a))return;
				

				 input(mas1, n1, a, b);
				 output(mas1,n1, lstMas1);
				 
				 n2=task(n1,mas1,mas2,sr,ind);
				 if(n2)
					 output(mas2, n2, lstMas2);
				 else
					 MessageBox::Show("Наиболее близкий к ср. арифм. элемент находится во второй половине массива", "Сообщение",MessageBoxButtons::OK,MessageBoxIcon::Information);

}

			 private: System::Void cmdExit_Click(System::Object^  sender, System::EventArgs^  e) 
					  {
						   this->Close();
					  }

};
}
Код:
//Файл GetPut.cpp с функциями ввода и вывода
#include "stdafx.h"

//Функция формирования массива из n случайных целых чисел диапазона [a, b]
void input(int mas[], int n, int a, int b)
{
	Random^ rnd = gcnew Random;//создание объекта типа random
	for (int i = 0; i < n; i++)//цикл заполнения массива
		//Генерация случ. значений в диапазоне от a до b
		mas[i] = rnd->Next(a, b);
}

//Функция вывода массива в ListBox
void output(int mas[], int n, ListBox^ Lb)
{
	Lb->Items->Clear();
	for (int i = 0; i < n; i++)
	{
		String^ s = mas[i].ToString();
		Lb->Items->Add(s);
	}
	if(!n) Lb->Items->Add("Массив пуст");
}





//Функция ввода целого числа с контролем непустого текстового поля 
//и нахождения числа в отрезке [1;MaxVal]
bool GetInt(const int MaxVal, TextBox^ Tx, String^ s, int& x)
{
	if(Tx->Text->Length == 0) //если текст. поле пусто
	{
		MessageBox::Show(s, "Ошибка ввода", MessageBoxButtons::OK,MessageBoxIcon::Error);
		Tx->Focus();
		return false;
	}
	x = Convert::ToInt32(Tx->Text);
	
	if( x > MaxVal) //если х выходит за допустимые границы
	{
		MessageBox::Show(s, "Ошибка ввода", MessageBoxButtons::OK, MessageBoxIcon::Error);
		Tx->Focus();
		return false;
	}
	return true;
}
Код:
//файл task.cpp с функциями решения задачи 
#include "stdafx.h"
#include <cmath>


bool simple (int n,int mas[],float& sr, int& ind)
 {
        int i,k;
		int sum=0,s,min;
		for (int i=0;i<n;i++)
				//if (n>0 && abs(sr-mas[i]<s)) 
			if (mas[i]>0) //  
			    {sum+=mas[i]; k++;}
			sr=sum/k;
			min= abs(sr-mas[0]);ind=0;
			for (int i=1;i<n;i++)	
			{
				s=abs(sr-mas[i]);
				if(s<min) {min=s; ind=i;}
			}
			if (ind<n/2)
		         return true;
			return false;
			

  }			

int task(int n,int mas[] ,int newmas[] ,float& sr, int& ind)
{
	//float sr;
	//int i,ind;
	int k=0;
	if(simple(n,mas,sr,ind)==false) return 0;
	for(int i=0;i<n;i++)
		if(mas[i]>0 && ind<n/2 )
		{
			newmas[k]=mas[i];
			k++;
		}
		return k;
}
Tat0107 вне форума Ответить с цитированием
Старый 22.03.2021, 18:15   #2
FrosyaZZ
Форумчанин
 
Регистрация: 16.11.2020
Сообщений: 243
По умолчанию

Код:
sum/k
целочисленное деление
FrosyaZZ вне форума Ответить с цитированием
Старый 22.03.2021, 18:23   #3
Tat0107
Новичок
Джуниор
 
Регистрация: 20.03.2021
Сообщений: 5
По умолчанию

Цитата:
Сообщение от FrosyaZZ Посмотреть сообщение
Код:
sum/k
целочисленное деление
а как исправить? С индексом что тогда не так? Индекс вообще миллионное число выдает
Tat0107 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводится неправильное значение select. Как исправить? makeart JavaScript, Ajax 1 13.06.2018 12:02
Почему жалуется на неправильное описание процедуры? zaira001002 Общие вопросы Delphi 3 17.09.2015 18:01
Почему выводится такое значение? (Си) Vimork Помощь студентам 7 05.01.2014 23:40
Неправильное число выводится в Edit T-dayne Помощь студентам 1 18.05.2010 20:40
Неправильное значение переменной типа long Einsttein Общие вопросы C/C++ 8 15.03.2010 10:04