Вопрос № 110303: Здравствуйте!
Совсем не могу понять, как решать задачи с помощью подпрограмм (т.е. как их объявлять и вызывать в порграмме. Помогите пожалуйста решить:
1) Задано две квадратные матрицы n-ого порядка (n<=20). Найти квадрат той из них, в которо...Вопрос № 110339: Здравствуйте! Вопрос в следующем: не могу вернуть массив из функции.
Функция в приложении. Компилятор останавливается в строке:
return P;
Ошибка: [C++ Error] Unit1.cpp(88): E2034 Cannot convert '_STL::vector<float,_STL::allocator<fl...Вопрос № 110347: Доброго здравия всем желаю.
Есть класс Long. Посмотрите пожалуйста в неплохом ли стиле он реализаван?
Если нужно что-то улучшитьили поменять то подскажите. Чтобы можно было остановиться на нем как на базовом.
...Вопрос № 110348: Подскажите, как число четное или не четное. Я полагала так:
if ((sqrt(N)%2)==0) k=floor(sqrt(N)); else k=ceil(sqrt(N));
Но компилятор ругается на выражение sqrt(N)%2.
[C++ Error] Unit1.cpp(33): E2060 Illegal use of floating point
Зар...Вопрос № 110374: Доброго дня!
Вопрос следующий к уважаемым экспертам.Программирую на VC++ 6.0.
обьясните пожалуйста действие строки float f = 1024 / float(++i);
с остальными строками все просто и понятно.Почему во флоате можно делить на ноль и какая...Вопрос № 110376: Привет экспертам! Только начинаю изучать С++Builder6. Основная задача сейчас у меня научиться работе с текстовыми файлами(копировать строки, извлекать подстроку, определять кол-во столбцов в файле разделенным каким-либо разделителем и т.д) Учусь по к...
Вопрос № 110.303
Здравствуйте!
Совсем не могу понять, как решать задачи с помощью подпрограмм (т.е. как их объявлять и вызывать в порграмме. Помогите пожалуйста решить:
1) Задано две квадратные матрицы n-ого порядка (n<=20). Найти квадрат той из них, в которой сумма элементов главной диагонали наименьшая.
2) Вычислить: x1*xn+x2*xn-1+...+xn*x1? где xi-наибольший элемент i-ой строки матрицы Аn*n.
Borland C++ 3.1
Буду благодарен за любую помощь!
Отправлен: 20.11.2007, 17:04
Вопрос задал: LexXx (статус: Практикант)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Терсков Сергей
Здравствуйте, LexXx!
Вот решение вашей задачи. Написано в среде MS VS 2005. Для BC 3.1 заголовочный файл ввода-вывода называется и using namespace std; использовать не нужно. И функция rand() должная быть кажется другой. Но это все мелочи, а так в целом все позиции вопроса в коде отражены, и использование подпрограмм (функций) максимальное...
Приложение:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 21.11.2007, 05:01 Оценка за ответ: 5 Комментарий оценки: Супер ,спасибо огромное за ответ! Чуть не забыл оценку поставить :))
Вопрос № 110.339
Здравствуйте! Вопрос в следующем: не могу вернуть массив из функции.
Функция в приложении. Компилятор останавливается в строке:
return P;
Ошибка: [C++ Error] Unit1.cpp(88): E2034 Cannot convert '_STL::vector<float,_STL::allocator<float> >' to 'float *'
Если вместо строки:
std::vector<float> P(k);
прописать просто: float P[5]={0};
то все работает, подскажите как возвращать теперь массив P. И как измениться вызов функции? Ранее вызов был:
ver( a, b, N, k, stat)[i-1]
Заранее спасбо!
Приложение:
Отправлен: 21.11.2007, 00:31
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Терсков Сергей
Здравствуйте, Mart!
Ничего хорошего от такой замены вы не добьетесь. Массив вида
float P[5]={0};
создастся внутри функции и там же и останется. В этом случае вернется лишь мусор, а не вектор. Если вы решили использовать класс вектора, то используйте его везде. Подробнее в приложении...
Приложение:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 21.11.2007, 03:26 Оценка за ответ: 5
Вопрос № 110.347
Доброго здравия всем желаю.
Есть класс Long. Посмотрите пожалуйста в неплохом ли стиле он реализаван?
Если нужно что-то улучшитьили поменять то подскажите. Чтобы можно было остановиться на нем как на базовом.
Приложение:
Отправлен: 21.11.2007, 04:20
Вопрос задал: tito (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Виктор Пырлик
Здравствуйте, Tito!
Совершено не понятно что вы хотите сделать а по этому и определить «правильность» не возможно. Но даже исходя из внешнего вида, и предполагаемой логики (её отсутствия) данный класс не для чего не годится.
Файл в приложении, там есть комментарии…
Наверно, более правильным для данной постановки вопроса, было бы указать желаемую цель - функционал что требуется от этого класса.
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 21.11.2007, 07:04
Вопрос № 110.348
Подскажите, как число четное или не четное. Я полагала так:
if ((sqrt(N)%2)==0) k=floor(sqrt(N)); else k=ceil(sqrt(N));
Но компилятор ругается на выражение sqrt(N)%2.
[C++ Error] Unit1.cpp(33): E2060 Illegal use of floating point
Заранее спасибо!
Отправлен: 21.11.2007, 06:21
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Lemeshev Konstantin
Здравствуйте, Mart!
Правильно ругаеться, операция % (остаток от деления) определена только для целых чисел (да и в математике на сколько я помню признак четности относиться только к целым числам).
Так что если результат извлечения квадратного корня - целой число, то можно написать так
if( ((int)sqrt(N))%2 )==0)
Это же выражение будет определять четность целой части квадратного корня.
Ответ отправил: Lemeshev Konstantin (статус: 6-ой класс)
Ответ отправлен: 21.11.2007, 06:34 Оценка за ответ: 5
Отвечает: Sergijj
Здравствуйте, Mart!
А определять чётность целого числа лучше так:
#include <stdio.h>
//...
int value = 5;// Например
unsigned char parityFlag;// Флаг чётности
parityFlag = value & 0x0001;// Если младший бит равет 1 (т.е. будет остаток от деления на 2), то и parityFlag станет равным 1
if (parityFlag) printf("Число нечётное"); else printf("Число чётное");
//...
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 10-ый класс)
Ответ отправлен: 21.11.2007, 09:17
Отвечает: Терсков Сергей
Здравствуйте, Mart!
Вообще-то лучше данную операцию сделать немного по другому. Например как в приложении. Такая конструкция позволяет вычислять корень лишь один раз, да и компилятор ругаться не будет...
Приложение:
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 21.11.2007, 10:25
Вопрос № 110.374
Доброго дня!
Вопрос следующий к уважаемым экспертам.Программирую на VC++ 6.0.
обьясните пожалуйста действие строки float f = 1024 / float(++i);
с остальными строками все просто и понятно.Почему во флоате можно делить на ноль и какая последовательность действий при этом проиходит?
если в чистом виде написать 0.00 то деления уже на этапе компиляции не будет.
#include <iostream>
using namespace std;
void main()
{
char i = char(255);
float f = 1024 / float(++i);
int j = 1024 / i--;
cout << j << endl;
return;
}
Отправлен: 21.11.2007, 11:50
Вопрос задал: denver (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Vas177
Здравствуйте, denver!
float f = 1024 / float(++i);
равносильно
i := i + 1;
float f = 1024 / float(i);
т. е. в начале происходит инкремент i, а затем его подстановка в знаменатель.
Соответственно в следующей строке (i --) - декремент происходит уже после подстановки, т. е.
int j = 1024 / i--;
равносильно
int j = 1024 / i;
i := i - 1;
Поэтому в данном примере под дробью будет число 256 в обоих строчках
Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 21.11.2007, 11:57
Отвечает: Sergey A. Wedensky
Здравствуйте, denver!
По умолчанию исключения при работе с плавающей точкой отключены. Т.е. при выполнении недопустимой операции, переполнении и проч. результат просто становится "не числом" - INFINITY или NAN (посмотрите в отладчике значение f после присвоения, что-то вроде -1.#INF0000, правда?).
Протестировать результат можно функциями _finite(), _isnan(), _fpclass().
Для разрешения исключений сопроцессора можно использовать _controlfp(), например добавьте в начало Вашей main() следующий код:
// Получаем флаг
int cw = _controlfp( 0, 0 );
// Разрешаем исключения
cw &=~(EM_OVERFLOW|EM_UNDERFLOW|EM_INEXACT|EM_ZERODIVIDE|EM_DENORMAL|EM_INVALID);
// Устанавливаем
_controlfp(cw, MCW_EM);
и успешно вылетите на упомянутой строчке с exception'ом Invalid floating-point operation.
На этапе компиляции компилятор просто показывает, какой он умный, что видит очевидную нулевую константу в знаменателе оператора деления.
P.S. Упомянутые функции определены в хэдере .
Удачи.
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 21.11.2007, 12:39 Оценка за ответ: 5 Комментарий оценки: Вы абсолютно правы меня и удивило с самого начала 1.#INF0000.Думал что это что то связано с комлексными числами или пределами из математики помню что только там возникают бесконечности :-).В связи с этим и возник вопрос.Так что ставлю 5 за помощь говорю Огромное спасибо и понятные и доступные разъяснения.И не прощаюсь, а говорю до новых встречь всего Вам доброго
:-)
Вопрос № 110.376
Привет экспертам! Только начинаю изучать С++Builder6. Основная задача сейчас у меня научиться работе с текстовыми файлами(копировать строки, извлекать подстроку, определять кол-во столбцов в файле разделенным каким-либо разделителем и т.д) Учусь по книге С++ Руководство для начинающих. Шилд. Своял для опытов простенькую формочку с парой кнопок и начал эксперементы. Пытаюсь открыть файл и сразу натыкаюсь на ошибку.При ближайшем рассмотрении ошибки понял, что все дело в слэше. В одной строке выводится путь с обратным
слэшем, а команда открытия работает с прямым слэшем. Как это можно обойти? И еще, если у кого-нить есть ссылочки на хорошие мануалы для работы с текстом в С++Builder киньте мне плиз. Очень буду благодарен!
Приложение:
Отправлен: 21.11.2007, 11:55
Вопрос задал: Endru (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лясин Александр Владимирович
Здравствуйте, Endru!
Не совсем понятно, всё - таки, на какую ошибку вы натыкаетесь? В какой входной строке путь с обратным слешем? Какая команда открытия работает с прямым слешем?
Хотелось бы более конкретных данных - как говорится - "Код в студию пожалуйста".
Приведённый вами код конечно не будет работать - вы пытаетесь открыть (в случае его существования) или создать (если такового нет) файл "Edit1->Text". Я думаю такого файла нет - так как в имени есть неразрешённый символ - '>'. Поэтому и ошибка вылетает.Чтобы открывать в вашем случае файл с названием в Edit1->Text, нужно писать примерно так(см. приложение).
Слешь здесь абсолютно не причём.
Хороший мануал есть в MSDN и в справке C++Builder.
Приложение:
Ответ отправил: Лясин Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 21.11.2007, 13:19 Оценка за ответ: 5 Комментарий оценки: Спасибо! Справка в C++Builder на англ. Трудновато для меня. Хотелось бы на русском что нибудь.
Отвечает: Лучников Ю.В.
Здравствуйте, Endru!
Вряд ли дело в каких то слешах. К тому же я их у вас не вижу;))
Дело в том, что вы в конструктор объекта impf передаете непонятно что;)
Первым параметром ожидается строка, в которой указан путь до открываемого файла. Вы же передаете строку дословно: "Edit1->Text" т.е. пытаетесь открыть файл с именем "Edit1->Text". Само собой такого не существует)
Скорее вы хотели взять путь файла, который был введен в Edit1 объект. Чтож, в поле Text он и находится. Но вот беда, Поле Text возвращает данные в виде AnsiString-строки. А конструктор ждет тип const char*. Ничего;) У класса AnsiString (а это класс, а не просто набор байтов) есть в свою очередь метод c_str(), который как раз возвращает содержимое себя как const char* str.
И еще, если конструктор не смог открыть файл, указанный ему как filename, в объекте устанавливается failbit в истину, который можно проверить методом fail().
Ответ отправил: Лучников Ю.В. (статус: 5-ый класс)
Ответ отправлен: 21.11.2007, 13:23 Оценка за ответ: 5 Комментарий оценки: Вы правы!Нужно действительно было использовать метод c_str(). Плюс я еще взял в кавычки.Моя вина.Вопрос по поводу лит-ры остается открытым.
Отвечает: RussianGM
Здравствуйте, Endru!
Насколько я понял вопрос, вы не можете открыть файл.
Чтобы открыть файл
Вместо:
std::ifstream impf("Edit1->Text");
Нужно писать:
std::ifstream impf("Имя_вашего_файла.txt"); //если файл находится в той же папке что и проект, иначе полный путь до файла
Также не забудьте подключить необходимую библиотеку в Unit1.h:
#include <fstream.h>
Ответ отправил: RussianGM (статус: 1-ый класс)
Ответ отправлен: 21.11.2007, 13:49 Оценка за ответ: 4
Отвечает: Зубков Сергей Вячеславович
Здравствуйте, Endru!
Привет! Нужно сделать следующее:
Приложение:
Ответ отправил: Зубков Сергей Вячеславович (статус: 1-ый класс)
Ответ отправлен: 21.11.2007, 14:42 Оценка за ответ: 5 Комментарий оценки: Спасибо!