Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 923
от 01.12.2007, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 478, Экспертов: 66
В номере:Вопросов: 12, Ответов: 24


Вопрос № 110943: Добрый вечер!Помогите пожалуста узнать чтобудет напечатано? Формулировка задачи. #include<stdio.h> main() { int a[4] [4]={1,1,-1,1,-2,-1,1,1,3,-1,-1,1,2,-2,1,-1},b[4],i,j; for(i=0;i<4;i++) { b[i]=a[i] [0] for(j=...
Вопрос № 110962: Здравсвуйте, поскажите как округлить до двух знаков после запятой: число 12.556, чтобы стало 12.56 Заренее спасбио!...
Вопрос № 110972: Подскажите как в C++Builder округлить число типа float при выводе в компонет например: StringGrid4->Cells[1][i]=FloatToStr(Mu[i-1]); где Mu[i-1]=24.34566 а нужно вывесте 24.35...
Вопрос № 110989: Здравствуйте, прошу помочь с этим заданием: Даны вещественные массивы D[5][5], S[5][5]. Для каждого массива опpеделить пpоизведение сpедних аpифметических значений элементов, pасположенных ниже и выше главной диагонали. Зарание благ...
Вопрос № 110990: Помогите написать программу на С++, которая бы генерировала линейный кроссворд( слова берутся из файлика). Если возможно то используя STL...
Вопрос № 110994: Доброго времени суток товарищи эксперты. Столкнулся с проблемкой. нужно както узнать среднее время доступа к в нешней и внутреней памяти (чтениезапись данных из оперативки, сидюкафлешки) подумал сначала посчитать время записи строки в ф...
Вопрос № 111000: Здравсвуйте! Я в шоке :) Какой должен быть тип переменной чтобы присвоить ей строку????????:( Я раньше программила в Delphi было так : var s:string; А в с++ как? :(...
Вопрос № 111021: Здравствуйте,Помогите пожалуйста решить такую задачу в языке Borland C, учусь программировать не так давно, нуждаюсь в помощи. Нужно создать программу, которая будет создавать матрицу, считать обратную матрицу и её определитель. Заранее благодар...
Вопрос № 111038: Доброго времени суток уважаемые эксперты. Для изучения С++ пробую создать многофайловое приложение в VS 2003 . Возникает ошибка: fatal error C1010: unexpected end of file while looking for precompiled header directive. Как это побороть?...
Вопрос № 111057: Пожалуйста помогите с задачкой по С++! Для меня это сложно, нужна ваша помощь....
Вопрос № 111073: Здравствуйте господа программисты. Я к вам по такому вопросу: у меня повисла лаба по программухе (ТС 2.0). Моя благодарность не будет иметь границ (в пределах разумного) если вы мне поможете её сделать. Суть задания в том, что мне надо в графическом ...
Вопрос № 111086: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, с программой. Она, вроде как простая, но, видно, я такой деревянный, что не могу решить. Программа включает три задачи: - получить из стандартного потока ввода строку, состоящую из неско...

Вопрос № 110.943
Добрый вечер!Помогите пожалуста узнать чтобудет напечатано? Формулировка задачи.
#include<stdio.h>
main()
{
int a[4] [4]={1,1,-1,1,-2,-1,1,1,3,-1,-1,1,2,-2,1,-1},b[4],i,j;
for(i=0;i<4;i++) {
b[i]=a[i] [0]
for(j=l;j<4;j++)
b[i]*=a[i] [j]
}
for(i=0;i<4;i++)
printf(" b(%d)=%d ",i,b[i] );
}
Отправлен: 25.11.2007, 18:48
Вопрос задал: Pimp (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Destr
Здравствуйте, Pimp!
Будет на экране
b(0)=-1 b(1)=2 b(2)=-3 b(3)=-2

если во втором for имелось ввиду j = i, а не j = l, неизвестная переменная
Ответ отправил: Destr (статус: 1-ый класс)
Ответ отправлен: 25.11.2007, 19:37


Вопрос № 110.962
Здравсвуйте, поскажите как округлить до двух знаков после запятой: число 12.556, чтобы стало 12.56
Заренее спасбио!
Отправлен: 25.11.2007, 21:13
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Гальцов Андрей
Здравствуйте, Mart!

float a = 12.556;
printf("%2.2f",a);

На экране: "12.56"

{%"число знаков пред запятой" . "число знаков после запятой" f}
---------
"The more you know, the less you need to show"
Ответ отправил: Гальцов Андрей (статус: Практикант)
Ответ отправлен: 25.11.2007, 21:22
Оценка за ответ: 5

Отвечает: Архипов Александр Леонидович
Здравствуйте, Mart!

FloatToStrF(n,ffFixed,7,2);, где n - число типа float, ffFixed - означает фиксированный формат,7 - число разрядов, 2 - число знаков после запятой
Ответ отправил: Архипов Александр Леонидович (статус: 10-ый класс)
Ответ отправлен: 26.11.2007, 08:13

Отвечает: Djec
Здравствуйте, Mart!
Если вы используете функцию printf для вывода, то это можно сделать с помощью указания точности:
float f;
f = 12.556;
printf( "%5.2f", f );
Если вы используете функцию cout для вывода, то это делается с помощью манипуляторов вывода: setw() и setprecision(). Их заголовки находятся в файле iomanip.h, который необходимо подключить для работы с ними через #include <iomanip.h>
setw( p ) - задает количество символов на вывод числа
setprecision( q ) - задает количество символов после запятой.
Использование:
float f;
f = 12.556;
cout << setw( 5 ) << setprecision( 2 ) << f;
---------
"Если ты что-то делаешь, делай это хорошо. если же ты не можешь или не хочешь делать хорошо, лчуше совсем не делай" © Л.Н.Толстой"
Ответ отправил: Djec (статус: 5-ый класс)
Ответ отправлен: 26.11.2007, 16:54


Вопрос № 110.972
Подскажите как в C++Builder округлить число типа float при выводе в компонет например:
StringGrid4->Cells[1][i]=FloatToStr(Mu[i-1]);
где Mu[i-1]=24.34566
а нужно вывесте 24.35
Отправлен: 25.11.2007, 21:57
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архипов Александр Леонидович
Здравствуйте, Mart!
Для этого надо использовать функцию FloatToStrF

AnsiString FloatToStrF (long double Value, TFloatFormat Format, int Precision, int Digits);

Например:
StringGrid4->Cells[1][i]=FloatToStrF(Mu[i-1],ffFixed,7,2);
Ответ отправил: Архипов Александр Леонидович (статус: 10-ый класс)
Ответ отправлен: 26.11.2007, 06:08
Оценка за ответ: 5

Отвечает: Виктор Пырлик
Здравствуйте, Mart!

StringGrid4->Cells[1][i] = FormatFloat("#,#.00",Mu[i-1]);
StringGrid4->Cells[1][i] = FloatToStrF(Mu[i-1],ffNumber,6,2);

PS: Для C++ Builder доступны многие функции, которые есть в Delphi.

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 26.11.2007, 06:08
Оценка за ответ: 5

Отвечает: Dr_Andrew
Здравствуйте, Mart!
Попробуйте использовать функцию с параметрами:
FloatToStr(Mu[i - 1], ffFixed, 2, 2);
Ответ отправил: Dr_Andrew (статус: 4-ый класс)
Ответ отправлен: 26.11.2007, 07:48


Вопрос № 110.989
Здравствуйте, прошу помочь с этим заданием:

Даны вещественные массивы D[5][5], S[5][5]. Для каждого массива опpеделить пpоизведение сpедних аpифметических значений элементов, pасположенных ниже и выше главной диагонали.

Зарание благодарен.
Отправлен: 26.11.2007, 00:58
Вопрос задал: Чернов Виктор Александрович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Терсков Сергей
Здравствуйте, Чернов Виктор Александрович!
Попробуйте вариант решения вашей задачи приведенный в приложении...

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 26.11.2007, 03:53
Оценка за ответ: 5

Отвечает: Гальцов Андрей
Здравствуйте, Чернов Виктор Александрович!

Держите!...

Критерий "ниже гл. диагонали":
for(j=0;j {
for(i=j+1;i {
//...
}
}

Критерий "выше гл. диагонали":
for(i=0;i {
for(j=i+1;j {
//...
}
}

Удачи!

Приложение:

---------
"The more you know, the less you need to show"

Ответ отправил: Гальцов Андрей (статус: Практикант)
Ответ отправлен: 26.11.2007, 20:02
Оценка за ответ: 5


Вопрос № 110.990
Помогите написать программу на С++, которая бы генерировала линейный кроссворд( слова берутся из файлика). Если возможно то используя STL
Отправлен: 26.11.2007, 01:10
Вопрос задал: Aleha (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Dr_Andrew
Здравствуйте, Aleha!
Здесь:
http://www.gtoal.com/wordgames/scrabble_solver/findmoves.c.html исходник на Си с подробными комментариями. Перевести на Standard C++, полагаю, труда не составит.
Ответ отправил: Dr_Andrew (статус: 4-ый класс)
Ответ отправлен: 26.11.2007, 07:21
Оценка за ответ: 5


Вопрос № 110.994
Доброго времени суток товарищи эксперты.
Столкнулся с проблемкой.
нужно както узнать среднее время доступа к в нешней и внутреней памяти (чтениезапись данных из оперативки, сидюкафлешки)
подумал сначала посчитать время записи строки в файл, и время присваивания этойже строки пременной. Но как мне кажется, эта оооочень неправильно.
Наведите на путь истиный

C++
Отправлен: 26.11.2007, 01:35
Вопрос задал: Chip (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зубков Сергей Вячеславович
Здравствуйте, Chip!

Наибольшую точность которую я знаю, можно получить с помощью ассемблерной команды RDTSC, которая после выполнения возвращает 64-битное число в регистрах EDX:EAX. Это число интерпретируется как число тактов процессора с момента запуска приложения.

Это вместо замера времени, точность значительно повысится.
Ответ отправил: Зубков Сергей Вячеславович (статус: 1-ый класс)
Ответ отправлен: 26.11.2007, 12:34


Вопрос № 111.000
Здравсвуйте! Я в шоке :) Какой должен быть тип переменной чтобы присвоить ей строку????????:( Я раньше программила в Delphi было так :
var s:string;
А в с++ как? :(
Отправлен: 26.11.2007, 03:56
Вопрос задала: Mart (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Терсков Сергей
Здравствуйте, Mart!
Изначально в С не было строковых переменных. Вместо них пользовались массивом символов char[]. И все основные функции работы со строками использовали именно такой подход. С появлением C++ стали проектироваться различные ООП библиотеки. Появились различные классы для работы со строками, такие как AnsiString (VCL) или CString (MFC). Позже в С++ после введения в стандарт STL стандартным стал класс string. Поэтому лучше всего пользоваться именно им.
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 26.11.2007, 04:09

Отвечает: Dr_Andrew
Здравствуйте, Mart!
Ответ на Ваш вопрос зависит от конкретной реализации C++.
1. Наиболее универсальным способом хранения строк, используемым в классическом C/C++, является объявление строки как массива символов:

char* s;

При этом для работы с такими строками Вам понадобятся специальные функции (#include <string.h>)

2. В компиляторах, поддерживающих Standard C++, удобнее воспользоваться классом STL string:

#include <iostream>
#include <string>
using namespace std;

string s;

Для строк данного класса реализованы операторы присваивания (=), конкатенации (+), равенства (==) и др.

3. В Borland C++ Builder с целью совместимости с Дельфи реализован класс AnsiString:

AnsiString s;

Для приведения строки данного типа к типу п. 1 используют выражение:

s.c_str();

4. В библиотеке Qt используют класс QString, являющийся "обёрткой" для типов строк 1 и 2, и поддерживающий много дополнительных функций.
Ответ отправил: Dr_Andrew (статус: 4-ый класс)
Ответ отправлен: 26.11.2007, 06:44
Оценка за ответ: 5

Отвечает: Виктор Пырлик
Здравствуйте, Mart!
Учтите, что в С/С++ есть чувствительность к регистру.
По этому, объявление String s будет не правильным, а вот string s верно.

Более привычным все же является массив символов char.
Например:

char *st1 = (char*)malloc(50);//память на 50 символов
sprintf(st1,"Просто строка - 1");

char *st3 = new char[50]; //C++ стиль
sprintf(st1,"Просто строка - 3");

char st2[] = "Просто строка - 2";//автоматическое выделение памяти

printf("%s %s %s",st1,st2,st3);
free(st1);
delete []st3;


Но в С++Builder вы можете продолжать использовать String так же как и в Delphi. Только в этом случае, надо объявлять с большой буквы - например
String s = "Это просто строка"

---------
Если ничего не помогло - надо читать инструкцию
Ответ отправил: Виктор Пырлик (статус: Специалист)
Ответ отправлен: 26.11.2007, 06:51
Оценка за ответ: 5

Отвечает: CruelHity
Здравствуйте, Mart!
Вообще стандартная перемена это массив символов:
1)char str[255];
2)если динамическая
char *str;
а потом через оператор new присваиваем размерность
str=new char[кол-во символов];

но вообще существуют много классов работы со строками, например string(описаный в string.h), или в MFC очень удобный класс CString! их описания вы можете най в MSDN!

Но я советую работать со стандартными строками char!
Ответ отправил: CruelHity (статус: 5-ый класс)
Ответ отправлен: 26.11.2007, 08:30

Отвечает: Зубков Сергей Вячеславович
Здравствуйте, Mart!

А в с++ так:

char * string = "Hello!";
Ответ отправил: Зубков Сергей Вячеславович (статус: 1-ый класс)
Ответ отправлен: 26.11.2007, 11:57


Вопрос № 111.021
Здравствуйте,Помогите пожалуйста решить такую задачу в языке Borland C, учусь программировать не так давно, нуждаюсь в помощи.
Нужно создать программу, которая будет создавать матрицу, считать обратную матрицу и её определитель. Заранее благодарен.
Отправлен: 26.11.2007, 10:01
Вопрос задал: Serpantine (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Serpantine!
Подобные алгоритмы уже много раз были реализованы, и в том числе и на С++. По сайтам алгоритмов и исходников найти их не проблема. Например вот здесь...

Обратная матрица:
Описание алгоритма,
Исходники

Определитель матрицы:
Описание алгоритма,
Исходники
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 26.11.2007, 10:21
Оценка за ответ: 4
Комментарий оценки:
хотелось бы тчо нибудь более доступное, потому что трудно в етом разобраться


Вопрос № 111.038
Доброго времени суток уважаемые эксперты. Для изучения С++ пробую создать многофайловое приложение в VS 2003 . Возникает ошибка: fatal error C1010: unexpected end of file while looking for precompiled header directive. Как это побороть?
Отправлен: 26.11.2007, 12:00
Вопрос задал: znr (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Vas177
Здравствуйте, znr!

1. Проверьте тщательно наличие всех закрывающих скобок } для всех {
2. Проверьте также директивы #ifdef и #endif, чтобы они тоже соответствовали друг другу.
3. Проверьте наличия ; после } в объявлении структур, классов, перечислений
class ... {...};
struct ... {...};
enum ... {...};
Ответ отправил: Vas177 (статус: 2-ой класс)
Ответ отправлен: 26.11.2007, 12:14
Оценка за ответ: 2
Комментарий оценки:
Конечно это было несколько раз проверено.

Отвечает: Ross
Здравствуйте, znr!

Просто добавьте в самом начале файла строку:
#include "stdafx.h"
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 26.11.2007, 17:20
Оценка за ответ: 2
Комментарий оценки:
Не помогло.

Отвечает: Терсков Сергей
Здравствуйте, znr!
Достаточно частая проблема с Visual Studio. В сети достаточно много советов, как от нее избавиться. Цитирую...


У вас есть такой выбор:

1) бездумно поместить в самое начало .cpp файла с ошибкой #include "stdafx.h", бездумно надеясь что это поможет.
2) В настройках этого файла отключить использование precompiled header
3) Понять что это такое, и как этим пользоваться. Это может сильно ускорить компиляцию проекта.

http://www.cygnus-software.com/papers/precompiledheaders.html - подробней здесь.
http://www.gamedev.ru/forum/?group=0&topic=11827 - так же здесь.


http://www.gamedev.ru/faq/?id=35)
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 27.11.2007, 02:45
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Помогло.


Вопрос № 111.057
Пожалуйста помогите с задачкой по С++! Для меня это сложно, нужна ваша помощь.

Приложение:

Отправлен: 26.11.2007, 13:57
Вопрос задал: Domin9es (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Терсков Сергей
Здравствуйте, Domin9es!
Если С++, то можно использовать STL. Здесь начальные данные - это два целочисленных массива (массивы заполняются случайными числами, но можно сделать и чтение из файлов). Конечный массив получается при помощи алгоритмов merge и unique из STL.

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 27.11.2007, 04:11


Вопрос № 111.073
Здравствуйте господа программисты. Я к вам по такому вопросу: у меня повисла лаба по программухе (ТС 2.0). Моя благодарность не будет иметь границ (в пределах разумного) если вы мне поможете её сделать. Суть задания в том, что мне надо в графическом режиме нарисовать танцующего человека. Человечик самый примитивный(голова - кружок, туловище- вертикальная линия, руки - горизонтвльная линия) он должен дергать ногами, остальные части тела неподвижны.
Отправлен: 26.11.2007, 16:26
Вопрос задал: Ptica (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Sergey A. Wedensky
Здравствуйте, Ptica!

С человечком Вы повеселили.
У меня конечно нет TC 2.0. Как там с графикой естественно не помню (всякие circle и line...), но вот Вам пример человечка в текстовом режиме. Принцип тот же, только отрисовку нужно поменять. Возможно, пригодится...

Приложение:

Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 26.11.2007, 17:00
Оценка за ответ: 3
Комментарий оценки:
Конечно не то что хотелось, т.к. лаба называется "работа с графикой" но всё равно спасибо за отзывчивость.

Отвечает: Гальцов Андрей
Здравствуйте, Ptica!

Пляшет конечно не очень, но задача выполнена :)

Приложение:

---------
"The more you know, the less you need to show"

Ответ отправил: Гальцов Андрей (статус: Практикант)
Ответ отправлен: 26.11.2007, 21:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое за помощь, то что надо. Очень приятно что на этом форуме не забивабт на новичков и вовремя отвечают на вопросы!!! Респект вам ребята


Вопрос № 111.086
Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста, с программой. Она, вроде как простая, но, видно, я такой деревянный, что не могу решить. Программа включает три задачи:
- получить из стандартного потока ввода строку, состоящую из нескольких слов (с этим никаких, вроде, проблем - cin.getline(str, 50 , ' ' );
- выделить подстроки и вывести на экран в порядке возрастания длины (а вот тут уже проблема - не получается ни в какую их выделить!);
- подсчитать средний код символов в каждой подстроке и вывести на экран (тут будто бы легко, но до этого вообще никак не доберусь, учитывая нерешаемость предыдущей задачи).
Большущее спасибо за помощь!
Отправлен: 26.11.2007, 17:53
Вопрос задал: Mangoost (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: CruelHity
Здравствуйте, Mangoost!
Я так понял вам надо в третьем найти среедне арифметическое ASCII, вот в приложении весь пример с выводом!
Только в среднем арифметическом я не считал пробелы

Приложение:

Ответ отправил: CruelHity (статус: 5-ый класс)
Ответ отправлен: 26.11.2007, 22:12


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.64 от 24.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное