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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2022, 19:49   #1
Iryna Kapran
Новичок
Джуниор
 
Регистрация: 01.12.2022
Сообщений: 1
По умолчанию Построение гистограмм, графиков, тепловых карт

С++ делает подсчёт и выдаёт данные, но возникает трудность в создании гистограммы, графика и тепловой карты на основе полученных результатов. Вот код для получения данных:

#include <iostream>
#include <iomanip>
#include <cmath>

int main() {
int S[20*20];
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
if (std::rand() % 100 >= 50) { S[20 * i + j] = 1; }
else { S[20 * i + j] = -1; }
}
}
for (int i = 0; i < 20; i++) { // Here we show an array.
for (int j = 0; j < 20; j++) {
std::cout << std::setw(3) << S[20 * i + j] << " ";
}
std::cout << std::endl;
}
int T = 273; // Temperature.
for (unsigned int k = 0; k < 10; k++) {
int J = 0, r = 0;
r = std::rand()%400;
if ((r + 1 >= 0) && (r + 1 <= 400)) {
if (S[r] == S[r + 1]) { J--; }
else if (S[r] != S[r + 1]) { J++; }
}
if ((r - 1 >= 0) && (r - 1 <= 400)) {
if (S[r] == S[r - 1]) { J--; }
else if (S[r] != S[r - 1]) { J++; }
}
if ((r + 20 >= 0) && (r + 20 <= 400)) {
if (S[r] == S[r + 20]) { J--; }
else if (S[r] != S[r + 20]) { J++; }
}
if ((r - 20 >= 0) && (r - 20 <= 400)) {
if (S[r] == S[r - 20]) { J--; }
else if (S[r] != S[r - 20]) { J++; }
}
int E1 = J; J = 0;
if ((r + 1 >= 0) && (r + 1 <= 400)) {
if (S[r] == -S[r + 1]) { J--; }
else if (S[r] != -S[r + 1]) { J++; }
}
if ((r - 1 >= 0) && (r - 1 <= 400)) {
if (S[r] == -S[r - 1]) { J--; }
else if (S[r] != -S[r - 1]) { J++; }
}
if ((r + 20 >= 0) && (r + 20 <= 400)) {
if (S[r] == -S[r + 20]) { J--; }
else if (S[r] != -S[r + 20]) { J++; }
}
if ((r - 20 >= 0) && (r - 20 <= 400)) {
if (S[r] == -S[r - 20]) { J--; }
else if (S[r] != -S[r - 20]) { J++; }
}
if (J - E1 < 0) { S[r] = -S[r]; }
else if (J - E1 > 0) {
if (std::rand() % 100 >= (3 ^ ((E1 - J) / T))) {
S[r] = -S[r];
}
}
std::cout << std::endl;
for (int i = 0; i < 20; i++) { // Here we show an array.
for (int j = 0; j < 20; j++) {
std::cout << std::setw(3) << S[20 * i + j] << " ";
}
std::cout << std::endl;
}
}
}
Iryna Kapran вне форума Ответить с цитированием
Старый 04.12.2022, 04:37   #2
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от Iryna Kapran Посмотреть сообщение
С++ делает подсчёт и выдаёт данные, но возникает трудность в создании гистограммы, графика и тепловой карты на основе полученных результатов.
Как это всё должно быть нарисовано по массиву S, в котором только 1 и -1? Непонятно же. Тут программисты ошиваются, а не физики.
Цитата:
Сообщение от Iryna Kapran Посмотреть сообщение
Вот код для получения данных:
Который надо окружать tag-ами [ CODE ] [ / CODE ] (без пробелов).
Цитата:
Сообщение от Iryna Kapran Посмотреть сообщение
Код:
		if ((r + 1 >= 0) && (r + 1 <= 400)) {
Второе граничное условие должно быть «r + 1 < 400», потому что в C++ индекс должен быть строго меньше длины массива. Вообще, здесь лучше сделать функцию:
Код:
bool index_is_valid(int index) {
  return (0 <= index) && (index < 400);
}
и потом её использовать во всех таких if-ах.
Цитата:
Сообщение от Iryna Kapran Посмотреть сообщение
Код:
			if (S[r] == S[r + 1]) { J--; } 
			else if (S[r] != S[r + 1]) { J++; }
Так не надо писать, надо так:
Код:
if (S[r] == S[r + 1]) { J--; } 
else { J++; }
В else мы как раз и попадём, если элементы не равны.
Цитата:
Сообщение от Iryna Kapran Посмотреть сообщение
Код:
			if (std::rand() % 100 >= (3 ^ ((E1 - J) / T))) {
Это вы так пытаетесь число 3 возвести в степень «(E1 - J) / T»? В C++, ^ -- это битовый xor, а возведение в степень делается функцией pow из <math.h> (она же std::pow из <cmath>). Кстати, E1, J и T -- это переменные типа int, поэтому деление будет целочисленное, с округлением.
Пётр Седов вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посоветуйте сторонний компонент для конструкции графиков / гистограмм impeee Компоненты Delphi 5 05.10.2013 00:06
построение графиков. Си Моркковь!) Помощь студентам 2 09.06.2011 12:24
Построение графиков. USB. МК Agnikay Visual C++ 7 28.05.2011 17:44
Построение гистограмм или нормальное распределение FunerallMooN Помощь студентам 0 25.03.2011 02:30
Построение графиков <3myworld Microsoft Office Excel 2 18.03.2010 07:48