Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
#1

Где косяк в коде? - C++

29.07.2011, 11:26. Просмотров 1366. Ответов 31
Метки нет (Все метки)

Вообщем нужно к матрице коэффициентов системы линейных уравнений дописать справа столбец свободных членов. Написал код. На маленьких матрицах работает, а на больших - нет Помогите!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using namespace std;
 
int main()
{
    ifstream fin11("5.txt");
    int range = 3;
    double*free = new double[range];
    int qwer = 0;
    while ( fin11 >> free[qwer])
    { qwer++; }
    fin11.close();
 
    ifstream fin1("4.txt");
    ofstream ofs3("3.txt");
    char a;
    int i = 0;
    while(!fin1.eof())
    {
        a = fin1.get();
        if ( fin1.eof() ) break;
        if ( a == '\n' ){ ofs3 << free[i] << endl;} else
        { ofs3 << a; }
    }
    fin1.close();
    ofs3.close();
delete[] free;
Работаю с матрицей порядка 3638.
0
Вложения
Тип файла: rar Матрица и столбец.rar (76.6 Кб, 12 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2011, 11:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Где косяк в коде? (C++):

Где косяк в коде и как исправить? - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale (LC_CTYPE, &quot;Russian&quot;); cout &lt;&lt; &quot;Введите числа нажимая...

Где косяк? - C++
Имеется задача... #include &lt;stdio.h&gt; #include &lt;string&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; int main() ...

Объясните где я косяк (switch case + char) - C++
Доброе время суток! Имеется: for (unsigned int i=0; i&lt;v.size(); ++i) { cout &lt;&lt;&quot;# &quot;&lt;&lt;v.number &lt;&lt;&quot; \t&quot; ...

Некорректно выводит массив,немогу понять где косяк - C++
#include&lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale (LC_ALL,&quot;.ACP&quot;); int i,j,n; int...

Где ошибка в коде ? - C++
задача Треугольный ряд чисел : первое число 1 второе на 2 больше чем первое , 3е на 3 больше чем второе итд.......

Где ошибка в коде - C++
по запросу строки программа должна выдавать строку с увеличением на 2 .Например запрашиваю 1 строку он выдает 3 строку { ...

31
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,246
29.07.2011, 15:39 #16
Цитата Сообщение от diagon Посмотреть сообщение
gcc пишет test.cpp:4:23: error: invalid conversion from ‘void*’ to ‘int*’ А этот проглатывает?
C++
1
istream& operator>> (...)
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.07.2011, 15:39 #17
Ну тогда вернемся к моему первоначальному вопросу - указатель на что возвращает >> при успешном считывании?
Цитата Сообщение от voral Посмотреть сообщение
istream& operator>> (...)
Т.е. вас не смущает тот факт, что gcc пишет
invalid conversion from ‘void*’ to ‘int*’
а не
invalid conversion from ‘istream&’ to ‘int*’
?
0
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
29.07.2011, 15:40  [ТС] #18
Вот исправил чуток. На маленьких матрицах - работает. Что же касается матрицы порядка 3638, то в качестве присоединенного столбца свободных членов - мусор.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    ifstream fin11("5.txt");
    int range = 3;
    double*dfree = new double[range];
    int qwer = 0;
    while ( fin11 >> dfree[qwer] )
    { 
        qwer++; 
    }
    fin11.close();
 
    // Дописывание столбца к матрице
    ifstream fin1("4.txt");
    ofstream ofs3("3.txt");
    char a;
    int i = 0;
    while(!fin1.eof())
    {
        a = fin1.get();
        if ( fin1.eof() ) break;
        if ( a == '\n' ){ ofs3 << dfree[i] << endl; i++; } else
        { ofs3 << a; }
    }
    fin1.close();
    ofs3.close();
 
    delete[] dfree;
В конце каждой строчки матрицы коэффициентов стоит символ переноса строки. Я его использую как сигнал для того, чтобы вставить нужный элемент их столбца свободных членов.
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,246
29.07.2011, 15:42 #19
Цитата Сообщение от hello19 Посмотреть сообщение
Вот исправил чуток. На маленьких матрицах - работает. Что же касается матрицы порядка 3638, то в качестве присоединенного столбца свободных членов - мусор.
1 Вы внимательно читаете ответы?
2. При использовании матрицы 3639 сколько элементов должен содержать массив dfree?
0
grizlik78
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
29.07.2011, 15:43 #20
Цитата Сообщение от diagon Посмотреть сообщение
Ну тогда вернемся к моему первоначальному вопросу - указатель на что возвращает >> при успешном считывании?
Ни на что. Это же нетипизированный указатель и не предполагает ни разыменования, ни даже использования в качестве указателя. Просто использование особенностей языка при преобразовании типов.
Думаю это может быть (void*)(1), хотя это только предположение.
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,246
29.07.2011, 15:44 #21
3. Какой реально размер массива dfree?
0
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
29.07.2011, 15:45  [ТС] #22
to voral: ну сообрази сколько он должен содержать то элементов...
Не думай - 3638.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
29.07.2011, 15:46 #23
Цитата Сообщение от grizlik78 Посмотреть сообщение
Ни на что. Это же не типизированный указатель и не предполагает ни разыменования, ни даже использования в качестве указателя. Просто использование особенностей языка при преобразовании типов.
Думаю это может быть (void*)(1), хотя это только предположение.
Зато его можно привести к указателю на нужный тип
Хм.
Этот код выводит 0x804a048 у меня на компьютере если ввести цифру и 0, если символ
C++
1
2
3
4
5
#include <iostream>
int main(){
    int x;
    std::cout << ( std::cin >> x );
}
Я надеялся, что он возвращает указатель на считанный объект. Это открыло бы новые возможности для быдлокодинга на acmp =)
Но он какую-то константу на моем компьютере возвращает видимо, т.к. давно проводил такие же тесты и цифра была та же.
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,246
29.07.2011, 15:47 #24
hello19,и уж совсем до кучи лично вам вопрос. Чему будет равно q после выполнения следующего кода:
C++
1
2
3
4
int arr[3];
arr[256]=10;
...... // различные действия
int q = arr[256];
Добавлено через 31 секунду
я то сообразил, а сам?
0
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
29.07.2011, 15:50  [ТС] #25
Ну ясно ж что значение range поменять нужно было...
Всерно выводится мусор.
0
grizlik78
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
29.07.2011, 15:50 #26
Цитата Сообщение от diagon Посмотреть сообщение
Этот код выводит 0x804a048 у меня на компьютере если ввести цифру и 0, если символ
А у меня 0x601050. Это может быть любой валидный указатель, отличный от нуля. Главное его назначение — проверка состояния потока

С++03:
27.4.4.3 basic_ios iostate flags functions
[lib.iostate.flags]
operator void*() const;
Returns: If fail() then a null pointer; otherwise some non-null pointer to indicate success.
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
29.07.2011, 15:53  [ТС] #27
Проблема в том, что массив свободных членов вообще не считывается... прохидит мимо и он пустым остается Что-то не пойму почему.
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,246
29.07.2011, 16:47 #28
Понятно.
1 Посмотри файл со списком свободных элементов B.txt в hex редакторе. Первым символом стоит 0xEF. Убирай.
2 Вероятно надо заменить запятые на точки

Кроме того A.txt А - латинское, B.txt B - русское
0
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
29.07.2011, 16:49  [ТС] #29
Название давно исправил... не заметил что запятых дело... спасибо!
0
voral
498 / 478 / 82
Регистрация: 16.03.2008
Сообщений: 2,246
29.07.2011, 16:51 #30
Многие программы Windows (включая Блокнот) добавляют байты 0xEF, 0xBB, 0xBF в начале любого документа, сохраняемого как UTF-8. Это метка порядка байтов Юникода (англ. Byte Order Mark, BOM), также её часто называют сигнатурой (соответственно, UTF-8 и UTF-8 with Signature). По наличию сигнатуры программы могут автоматически определить, является ли файл закодированным в UTF-8, однако файлы с такой сигнатурой могут некорректно обрабатываться старыми программами, в частности xml-анализаторами. Такие редакторы, как Notepad++, Notepad2 и Kate позволяют явно указывать, следует ли добавлять сигнатуру при сохранении UTF-файлов.
http://ru.wikipedia.org/wiki/UTF-8
0
29.07.2011, 16:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2011, 16:51
Привет! Вот еще темы с ответами:

где ошибка в коде - C++
// Урок 9. C++ Игра Угадай число.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...

Ошибка где-то в коде - C++
Не могу найти ошибку в коде. Выдает: недопустимо , правый оператор имеет тип int. #include &quot;stdafx.h&quot; #include&lt;iostream&gt; using...

Где то в коде ошибка - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define TRUE 1 #define FALSE 0 #define XRY 8 //Количество вершин графа. typedef int...

где ошибка в коде? - C++
видимо неправильно работает функция симметричности матрицы. потому что ввожу не симметричную матрицу, а она все равно сдвигает строку. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.