IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Пропадает результат picturebox.
сообщение
Сообщение #21


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
Да и твой код я так в полной мере не понял.
Что именно не понятно? Вроде все прозрачно: читаем из потока первую строку, там - размерность, конвертируем ее в целое число, запоминаем в Len. Дальше - читаем оставшуюся часть файла (ReadToEnd), и разбиваем ее на строки (разделитель - конец строки, или '\n'). Первые Len строк /от 0 до Len - 1/ нас не интересуют, поэтому их не обрабатываем. Начинаем с индекса Len, и до конца массива. Что делать с каждой из строк? Разбить ее по пробелу на последовательность элементов строки и каждый сконвертировать в целое число. Для этого нужен двумерный массив: int [ , ] значит массив с двумя измерениями.

Цитата
И наконец,для чего вообще нужен массив iArr
blink.gif Ты меня спрашиваешь? Тебе надо было, не мне:
Цитата
У меня есть файл в котором лежит число(размерность матрицы),затем исходная матрица и преобразованная матрица(размерность одинаковая).Можно ли как то считать быстро ненужную мне исходную матрицу ,чтобы быстро приступить к нужной
Вот iArr - и есть нужная матрица. Целочисленная, если что.

Насчет C++/CLI ничем помочь не могу, кроме ссылки. Вот тут посмотри:
How to read in a two dimensional array or any dimensional array from a file? , там решается подобная задача. Аналогичным методом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Возвращаясь к тем же баранам.Тот код ,что ты скидывал прекрасно работает для целых чисел.Я заменил строку.
iArr[i - Len, j++] = Convert::ToInt32(st); на iArr[i - Len, j++] = Convert::ToDouble(st); и тут возникли проблемы,когда число целое все прекрасно скидывается и записывается,но когда число дробное,то выдает сразу ошибку.
Цитата

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: Входная строка имела неверный формат.

Я попробовал сделать так.

String^ GetExceptionType( Exception^ ex )
{
String^ exceptionType = ex->GetType()->ToString();
return exceptionType->Substring( exceptionType->LastIndexOf( '.' ) + 1 );
}

void ConvertToDouble( String^ numericStr, Object^ defaultValue )
{
try
{
defaultValue = Convert::ToDouble( numericStr );
}
catch ( Exception^ ex )
{
defaultValue = GetExceptionType( ex );

}


и вызывать

ConvertToDouble( st, temp );
U[i - Len][j++] =temp;


Но теперь уже в темп ничего не записывается.В общем опять нужна помощ.
Когда я руками заменил вместо "." на "," все нормально отработало с U[i - Len][j++] = double::Parse(st);(его я тоже попробовал),да и с U[i - Len][j++] = Convert::ToDouble(st); тоже.
Но я считаю,что руками это делать,это во-первых занятие неблагодарное,а во-вторых,не по программистски)
А еще меня ооооочень интересует что за у.... нехороший человек придумал,что число дабл храниться в в памяти с точкой и соответственно записывается в файл с точкой,а вот считыватся должно с запятой,а потом преобразуется с точкой.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Гость






> ,что число дабл храниться в в памяти с точкой

ЧЁ

Просто во американским стандартам, отражённым во всех ЯП, вещественные числа пишутся через точку. Но дядя Билл решил, что раз в России принята запятая, то пусть и стандартный разделитель в русской версии винды будет запятая, что влияет на НЕКОТОРЫЕ функции ввода (и преобразования строк в числа).

Короче, я не знаю, как в С++.НЕТ это делается, но у тебя либо есть способ поменять разделитель для функции преобразования, либо взять другую функцию для преобразования строки в число.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Да решение оказалось действительно достаточно простым.

NumberFormatInfo^ Provider = gcnew NumberFormatInfo;
Рrovider->NumberDecimalSeparator = ".";
// и вызов
U[i - Len][j++] = Convert::ToDouble(st, Provider);

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


В общем я наконецто доделал.Протестировал на разных N правда до 45,вроде работает.
Если надо, могу выложить код.
Для моих граничных условий и функции при N=45 получается такой результат:
Изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.05.2024 23:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name