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

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


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

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

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

Выпуск № 1047
от 07.04.2008, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 477, Экспертов: 54
В номере:Вопросов: 6, Ответов: 6

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 130092: Как в C++ внутри какой-нибудь функции создать указатель так, чтобы можно было его использовать и дальше в программе, после завершения функции, т.е. нужно вернуть адрес указателя. Как это сделать ?...
Вопрос № 130100: Уважаемые эксперты объясните пожалуйста каждую строчку этой программы: #include <stdio.h> #include <conio.h> #include <iostream.h> void main() { clrscr(); int x,i,b,m; float s; int A[10]; prin...
Вопрос № 130127: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, написать программу на языке программирования C для решения следующей задачи: "Пусть дан текстовый файл. Распечатать строку с заданным номером". Заранее спасибо!...
Вопрос № 130129: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, написать программу на языке программирования C для решения следующей задачи: "Заданный во входном файле текст, за которым следует точка, распечатать в обратном порядке (по словам)"....
Вопрос № 130162: Дорогие эксперты, помогите пожалуйста решить задачу на Visual C++ 6.0 Помогите мне отсортировать одномерный массив, состоящий из n вещественных элементов, таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интерв...
Вопрос № 130192: Здравствуйте! С www.eclipse.org/downloads/ скачал Eclipse Classic 3.3.2. Там также доступно для скачивания Eclipse IDE for Java Developers Eclipse IDE for Java EE Developers Eclipse IDE for C/C++ Developers Eclipse for RCP/Plug-in...

Вопрос № 130.092
Как в C++ внутри какой-нибудь функции создать указатель так, чтобы можно было его использовать и дальше в программе, после завершения функции, т.е. нужно вернуть адрес указателя. Как это сделать ?
Отправлен: 01.04.2008, 19:10
Вопрос задал: Юрий Анатольевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sergey A. Wedensky
Здравствуйте, Юрий Анатольевич!

Выделить память внутри функции и вернуть полученный указатель.
Не забыть освободить память, когда она больше не нужна, в вызывающем блоке.

Приложение:

Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 01.04.2008, 19:14
Оценка за ответ: 5


Вопрос № 130.100
Уважаемые эксперты объясните пожалуйста каждую строчку этой программы:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{
clrscr();
int x,i,b,m;
float s;
int A[10];
printf ("Введите элементы массива ");
for (i=0;i<10;i++)
scanf ("%d",&A[i]);
m=*(A);
for (i=1;i<10;i++)
{if (*(A+1)<m);
m=*(A+0);
b=*(A);}
for (i=1;i<10;i++)
{if (*(A+i)>0);
b=*(A+i);}
x=0;
for (i=0;i<10;i++)
x=x+*(A+i);
s=x-m-b;
s=s/8;
cout <<" Среднее арифметич. без максимальн. и минимального элем. ="<<s<<" ";
getch();
}

Результат программы:
Введите элементы массива
1
2
3
4
5
6
7
8
9
10

Среднее арифметич без макс. и мин. элем. массива = 5,5
Т.е. без элем 1 и 10!
Отправлен: 01.04.2008, 20:27
Вопрос задал: Волошин Виталий Алексеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Verena
Здравствуйте, Волошин Виталий Алексеевич!
Ну, прежде чем объяснять, как работает эта программа, следует сказать, что работает она неверно. В Вашем тесте она отрабатывает правильно только потому, что максимальный и минимальный элементы расположены на первом и последнем местах. Сначала объясню Ваши ошибки. Сначала вот этот кусок:

m=*(A); //Здесь в m сохраняется первый элемент массива
for (i=1;i < 10;i++)
{
if (*(A+1) < m); //В этом if-е ничего не происходит, поскольку после него стоит ;, т.е. у него нет тела, да и условие в нём одно для люой итерации - сравнение второго элемента массива с m, которое не меняется
m=*(A+0); //В цикле на каждой итерации в m опять записывается первый элемент массива
b=*(A); //И в b на каждой итерации записывается первый элемент массива
}

Здесь применён метод работы с массивом через указатели, он основан на том, что сама переменная массива - это ссылка на первый его элемент, и его можн о получить с помощью операции разыменовывания - *. Тогда второй элемент - это *(а+1), третий - *(а+2) и т.д. Только в этом куске работа идёт всё время только с первый и вторым элементами (*(а), *(а+0) и *(а+1) соответсвенно), и действия в цикле на любой итерации происходят одни и те же... По логике, в первом цикле следовало бы найти минимальный и максимальный элементы, или хотя бы какой-то один из них, делается это так: в переменную сохраняется первый элемент массива, потом эта переменная в цикле сравнивается с остальными и, если встречается больший/меньший (в зависимости от того, максимум ищут или минимум), то переменная переписывается новым элементом. Таким образом, пройдя по всему массиву, мы получим в этой переменной искомое число. В моём исправлении в первом цикле ищется и минимум (m), и максимум (b). Теперь следующий кусок:

for (i=1;i<10;i++) //Цикл на 9 итераций
{
if (*(A+i)>0); //В этом if-е опять же ничего не происходит, да и при чём тут сравн ение с нулём вообще непонятно
b=*(A+i); //На каждой итерации в b записывается очередной элемент
}//По выходу из цикла b всегда будет равно последнему элементу

Что Вы делали в этом цикле, вообще не ясно... Зачем сравнивать текущий элемент с нулём? Если бы даже после if-а не стояла ошибочная ;, то в b у вас бы просто записался последний положительный элемент, чего, судя по всему, в задании не требуется. Возможно, здесь Вы пытались найти максимальное, но точно не скажу.
Вот последняя часть у Вас сделана верно - Вы суммируете все элементы массива и вычитаете из полученной суммы максимальное и минимальное. Зачем было заводить разные переменные для среднего и для суммы не ясно, но ошибкой это не является. Исправленная программа в приложении, она находит среднее арифметическое всех элементов массива, кроме максимального и минимального, я старалась свести исправления к минимуму. Комментарии, как Вы просили, даны к каждой строке кода.
Удачи!

Приложение:

---------
Эта история - не для истории, понимаешь?

Ответ отправила: Verena (статус: Практикант)
Ответ отправлен: 01.04.2008, 23:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо Вам огромное! Вы мне очень помогли! Этот сайт очень помогает в учебе!


Вопрос № 130.127
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, написать программу на языке программирования C для решения следующей задачи: "Пусть дан текстовый файл. Распечатать строку с заданным номером". Заранее спасибо!
Отправлен: 01.04.2008, 23:51
Вопрос задал: Vesel4 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Vesel4!
Вариант решения вашей задачи смотрите в приложении. Используется структура FILE и функция fgets. Читаем из файла стороки n-раз и получаем строку с нужным номером.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 02.04.2008, 10:24
Оценка за ответ: 5
Комментарий оценки:
Программа замечательно работает! Спасибо огромное!


Вопрос № 130.129
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, написать программу на языке программирования C для решения следующей задачи: "Заданный во входном файле текст, за которым следует точка, распечатать в обратном порядке (по словам)".
Отправлен: 01.04.2008, 23:51
Вопрос задал: Vesel4 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Vesel4!
Вариант решения вашей задачи смотрите в приложении. Строка задается непосредственно в программе, а не берется из файла. Разделители слов заданы в переменной const char *delimiters = " ,.:;"; При желании их количество можно увеличить. Строка разбирается с конца.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 02.04.2008, 10:28
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное!!!


Вопрос № 130.162
Дорогие эксперты, помогите пожалуйста решить задачу на Visual C++ 6.0
Помогите мне отсортировать одномерный массив, состоящий из n вещественных элементов, таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [a,b], а потом - все остальные.
Вот мой массив.

Приложение:

Отправлен: 02.04.2008, 09:19
Вопрос задал: Stasmur (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Stasmur!
Вариант решения вашей задачи смотрите в приложении. Сначала водятся нужные переменные (границы интервала, размер массива и его содержимое), затем выполняется проход по всем элементам массива. Если элемент попадает в интервал, то переносим его в начало массива. Компилировалось в MS VS 2005.

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 02.04.2008, 09:52


Вопрос № 130.192
Здравствуйте!
С www.eclipse.org/downloads/ скачал Eclipse Classic 3.3.2. Там также доступно для скачивания
Eclipse IDE for Java Developers
Eclipse IDE for Java EE Developers
Eclipse IDE for C/C++ Developers
Eclipse for RCP/Plug-in Developers
Не понятно для чего это. Хочется писать для платформы Android. На google есть плагин (SDK?) для Eclipse. Мне будет достаточно того, что я скачал или нужно ещё что-то из этого списка?
Отправлен: 02.04.2008, 12:24
Вопрос задал: Yadovit (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Алексей Демаков
Здравствуйте, Yadovit!

В системных требованиях там JDT (Java Development Tools). Этот плагин есть во всех перечисленных дистрибутивах, кроме C/C++ IDE.
Все, кроме Classic, содержат еще и WST (Web Standard Tools) плагин, который указан как необязательный, но необходимый для Android Editors feature. Для Classic можно скачать WST отдельно.

Вообще, из любого дистрибутива Eclipse можно получить необходимый, путем докачивания необходимых плагинов. Как правило, они имеют гораздо меньший размер, чем основной дистрибутив.
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 02.04.2008, 22:57


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

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

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

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

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

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


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


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.72.8 от 05.04.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное