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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2019, 06:02   #1
Dezzez
Новичок
Джуниор
 
Регистрация: 13.03.2019
Сообщений: 1
По умолчанию Помогите найти ошибку в коде с++

не могу найти ошибку в коде
при повторном нахождении минимума выводит просто ноль
Код:
# include <conio.h>
# include <iostream>
# include <ctime>
# include <cstdlib>
using namespace std;
int main() {
	setlocale(0, "rus");
	int N, M, A, B, Q, C, u, y, o, p;
	float min = 10000000, max = 0, sr;
	for ( ; ; ) {
		cout << "Введите размеры массива" << endl;
		cin >> N >> M;
		cout << "Введите диапазон рандома" << endl;
		cin >> A >> B;
		A = A * 100000; B = B * 100000; C = B - A;
		float **arr;
		arr = new float *[N];
		for (int i = 0; i < N; ++i) arr[i] = new float[M];
		for (int i = 0; i < N; ++i) {
			for (int k = 0; k < M; ++k) {
				arr[i][k] = (A + rand() % C)*1.00001; cout << arr[i][k] << "\t";
			} cout << endl;}
		do {
			for (int i = 0; i < N; ++i) {
				for (int k = 0; k < M; ++k) {
					if (max < arr[i][k]) { max = arr[i][k]; y = i; u = k; }
					if (min > arr[i][k]) { min = arr[i][k]; o = i; p = k; }}}
			cout << "макс=" << max << endl << "мин=" << min << endl;
			sr = (min + max) / 2; min = 10000000, max = 0;
			cout << "Среднее мин и макс " << sr << endl;
			arr[y][u] = 0; arr[o][p] = 0;
			cout << "Выберите следующее действие:" << endl;
			cout << "1.Повторить с изменением размера массива" << "   " << "2.Обнулить минимальное и максимальное и повторить вычисления" << "  " << "0.Выход" << endl;
			cin >> Q;
			if (Q == 0) { return 0; }
		} while (Q == 2);}
		_getch();}

______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Serge_Bliznykov; 13.03.2019 в 09:20.
Dezzez вне форума Ответить с цитированием
Старый 13.03.2019, 09:31   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не вижу принципиальных косяков (ну, кроме крайне сомнительной иницилизации переменных, да и max, min не нужны, достаточно y u o p )
https://ideone.com/8z787t

что не так?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 11:21   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,567
По умолчанию

Попробовать перед началом цикла за минимум и максимум принять arr[0][0] (конечно, запомнив индексы) и поиск вести уже от arr[0][1] ... до конца массива.

Serge_Bliznykov
Цитата:
да и max, min не нужны
Вообще не нужны ??

Последний раз редактировалось digitalis; 13.03.2019 в 11:24.
digitalis вне форума Ответить с цитированием
Старый 13.03.2019, 11:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Вообще не нужны ??
ага.
Код:
			y=0; u=0; o=0; p=0;
			for (int i = 0; i < N; ++i) {
				for (int k = 0; k < M; ++k) {
					if (arr[y][u] < arr[i][k]) {y = i; u = k; }
					if (arr[o][p] > arr[i][k]) {o = i; p = k; }}}
			cout << "макс=" << arr[y][u] << endl << "мин=" << arr[o][p] << endl;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 16:05   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,567
По умолчанию

Когда память была маленькой, а дискеты - большими , нам объясняли, почему так не надо делать: при выполении цикла два обращения к элементу массива, что медленнее (на несколько нс ), чем к скалярной переменной и элементу массива.
digitalis вне форума Ответить с цитированием
Старый 13.03.2019, 16:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Когда память была маленькой, а дискеты - большими , нам объясняли, почему так не надо делать
Это было давно.
Сейчас уже можно
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 16:46   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

Ну да, разницы между доступом к регистру и к адресу в памяти нет никакой.... особенно, если не в кэше.
p51x вне форума Ответить с цитированием
Старый 13.03.2019, 17:07   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну да, разницы между доступом к регистру и к адресу в памяти нет никакой.... особенно, если не в кэше.
ну что Вы занудствуете. ну да, конечно, есть разница!

Вопрос в другом. Разница большая? её нужно учитывать при разработке учебной программы? какая это будет разница, в несколько наносекунд или больше?
Вы сможете продемонстрировать эту разницу в работе программы на данном примере с массивами (особенно с учётом того, что в данном примере эти массивы помещаются на экран)?

Это всё разговоры про "пустой мешок"!

Лучше помогите автору топика найти ошибку в коде.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 17:14   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

Для этой учебной задачи вообще достаточно https://en.cppreference.com/w/cpp/al...minmax_element . А забивавшие на такие простые правила, потому что "задача учебная", дофига на работу приходит, хорошо если потом переучиваются.

Там вообще нужно обратить внимание на утечку памяти - память выделяется, указатель теряется и не освобождается.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Лучше помогите автору топика найти ошибку в коде.
Так авор пропал и что за проблема у него не доконца понятно. Если проблема в том, что после выбора 2 у него минимум становится 0... то чего он ожидал обнуляя элемент массива.
p51x вне форума Ответить с цитированием
Старый 13.03.2019, 17:25   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Для этой учебной задачи вообще достаточно https://en.cppreference.com/w/cpp/al...minmax_element .
ну, не уверен. разве minmax возвращает индексы (он же занулять min/max собирается).


Цитата:
Сообщение от p51x Посмотреть сообщение
Так авор пропал и что за проблема у него не доконца понятно. Если проблема в том, что после выбора 2 у него минимум становится 0... то чего он ожидал обнуляя элемент массива.
согласен.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде С sanya_prokopchuk Помощь студентам 4 11.12.2017 12:58
Помогите, пожалуйста, найти ошибку в коде (найти сумму факториалов чётных чисел в заданном диапазоне) kris14 Паскаль, Turbo Pascal, PascalABC.NET 8 25.10.2017 15:42
Помогите найти ошибку в коде NYork Помощь студентам 3 16.12.2014 19:45
помогите найти ошибку в коде xaero93 Помощь студентам 4 20.04.2009 16:05
Помогите найти ошибку в коде C++ Жека:) Помощь студентам 15 29.10.2008 11:32