Вопрос № 117266: Уважаемые эксперты,
поясните в чем дело:
мне необходимо найти сумму всех элементов 3-х мерного массива.(прога ниже).
Все корректно с точки зрения логики и синтаксиса, но почему-то при количестве элементов большем некоторого значения выдае...Вопрос № 117283: Скажите пожалуйста как сделать так что бы функция Node* descent(Node* p); была определена, т.к. выдает ошибку что он не определена. Спасибо заранее!!!...Вопрос № 117286: Здравствуйте эксперты!
Возник вопрос следующего плана.
Решил попробовать распознать капчу.написал анализатора все хорошо.Решил проверить в боевых условиях.И сразу столкнулся с проблемой.на сайтах многие капчи хранятся не в виде
<img s...Вопрос № 117312: Помогите пажлуста решить задачу Текст задачи таков
Дана целочисленная прямоугольная матрица надо опредилить № строки в которой находится самая длинная серия одинаковых элементов...Вопрос № 117321: Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста!
Необходимо отсортировать строчный массив arr по длине содержащихся в нем строк методом обмена ("пузырьковым")... Я вот накатал, только ни фига не работает... Что не так?
Бо...Вопрос № 117357: С рождеством вас,уважаемые эксперты. Помогите разобрать что делает эта задача(если не трудно просто подписать коментариии к каждой строчке)
Заранее спаибо....Вопрос № 117361: Уважаемые эксперты! есть задача по нахождению значения функции: ---------------------------------------------------- Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX. ax2-...Вопрос № 117383: Необходимо построить иерархию классов согласно схеме наследования, приведенной в варианте задания. Каждый класс должен содержать минимум
одну переменную с доступом типа private и функции-аксессоры ( get, set и show ). Функция main должна ил...Вопрос № 117384: Помогите написать програмку.
Программа случайным образом тасует колоду из 36 карт, раздаёт карты N игрокам, определяет козырную масть и игрока с правом первого хода. Количество игроков N и их имена вводятся с клавиатуры.
или привидите алгорит...Вопрос № 117387: Создать класс с заданными полями :
Транспорт (стоимость проезда, количество единиц в парке, рентабельность, название)
Создать конструктор без параметров (для начальной инициализации)
Создать массив из 5 объектов заданного класса
Н...
Вопрос № 117.266
Уважаемые эксперты,
поясните в чем дело:
мне необходимо найти сумму всех элементов 3-х мерного массива.(прога ниже).
Все корректно с точки зрения логики и синтаксиса, но почему-то при количестве элементов большем некоторого значения выдается сообщение "Stack overflow!".Что это означает?Стэк переполнен?Какой стэк? как с этим справиться?
P.S.: компилятор Borland C++ 3.1
Приложение:
Отправлен: 06.01.2008, 21:35
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Maksim Trofimov
Здравствуйте, Warobushek!
Интересный вопрос :)
Переполнение стека происходит здесь: float A[koli][kolj][kolk];, если koli, kolj, kolk заданы большими числами.
float A[koli][kolj][kolk]; - это статический массив и это значит, что память выделяется во время компиляции. Если я задам, например A[500][500][100], то такой массивчик не поместится в стек - он переполняет его. Для этого надо использовать динамический массив: float ***A;, с последующим выделением памяти. Так как это всего лишь указатель на указатель на указатель на тип float, это занимает очень мало места в стеке :)
#include <stdio.h>
typedef unsigned uint16;
// если у Вас много памяти, то можете поставить числа здесь побольше :)
const uint16 koli = 500;
const uint16 kolj = 500;
const uint16 kolk = 100;
double sum(double ***A, uint16 ki, uint16 kj, uint16 kk)
{
uint16 i, j, k;
double res = 0;
for(i = 0; i < ki; i++)
for(j = 0; j < kj; j++)
for(k = 0; k < kk; k++)
res+= A[i][j][k];
Ответ отправил: Maksim Trofimov (статус: 4-ый класс)
Ответ отправлен: 07.01.2008, 03:49 Оценка за ответ: 4
Отвечает: Solar
Здравствуйте, Warobushek!
У вас статический массив, поэтому при большом количестве элементов он не влезает в стек.
Справиться с этим можно используя динамический массив (float ***A).
Ответ отправил: Solar (статус: 2-ой класс)
Ответ отправлен: 08.01.2008, 01:16
Отвечает: Титов Михаил Анатольевич
Здравствуйте, Warobushek!
В предыдущих ответах уже разъяснялось о причине переполнения. Использование динамического выделения памяти позволяет решить проблему, но порождает сложную, избыточную структуру данных и требует сложного кодирования. Если принять во внимание механизм выделения памяти компилятором, то возможно будет приемлемым более простое решение, вместо
Суть изменений в следующем. Все переменные объявленные внутри блока {} (в том числе внутри тела функции, а main ровно такая же функция, как и все остальные), являются автоматическими, то есть создаются при входе в блок и уничтожаются при выходе из блока. И все они создаются на СТЕКЕ! Если не вдаваться в несущественные на данный момент детали, то стек - это область памяти ограниченного размера, предназначенная для некоторых специальных целей. В частности для хранения автоматических переменных.
Кроме автоматических можно объявить статические переменные. Постарайтесь разобратся и не путать категории: автоматические - статические переменные и статическое - динамическое распределение памяти. Это разные вещи!
Главное свойство статических переменных в том, что они могут существовать в течении всего времени работы программы. Но нас сейчас интересует другая их особенность - память для них выделятся не в стеке, а в некой другой области. Её часто называют "кучей". Её объем ограничен только физически доступной памятью и операционной системой.
Создать статическую переменную можно двумя путями, как показано выше: 1) объявить переменную вне какого либо блока, 2) при объявлении добавить ключевое слово static.
Ответ отправил: Титов Михаил Анатольевич (статус: 5-ый класс)
Ответ отправлен: 10.01.2008, 06:46 Оценка за ответ: 5 Комментарий оценки: великолепно!!!)
Вопрос № 117.283
Скажите пожалуйста как сделать так что бы функция Node* descent(Node* p); была определена, т.к. выдает ошибку что он не определена. Спасибо заранее!!!
Отвечает: heap11
Здравствуйте, Михеева Ира!
Определитесь с именем функции.
объявлена и используется функция "descept",
а определена "descent".
Скорее всего, первое - опечатка
Ответ отправил: heap11 (статус: 5-ый класс)
Ответ отправлен: 07.01.2008, 00:34 Оценка за ответ: 5
Вопрос № 117.286
Здравствуйте эксперты!
Возник вопрос следующего плана.
Решил попробовать распознать капчу.написал анализатора все хорошо.Решил проверить в боевых условиях.И сразу столкнулся с проблемой.на сайтах многие капчи хранятся не в виде
<img src="chapcha.gif"> как это было раньше, а в виде
img src="./image.php">.Запросы к старнице с капчей я делаю через винапишные функции.InternetOpen и так далее.они позволяют сохнарить в буфер страницу, но в ней нет этой картинки.Так как же получить эту самую картинку?Можно конечно же обратиться к image.php и затем переименовать ее и у меня будет картинка.но она абсолютно не будет связана со страницей.Подскаите как можно это реализовать?
Заранее благодарен.Очень надеюсь на Вашу помощь.
Отправлен: 07.01.2008, 00:43
Вопрос задал: denver (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: физик фрик
Здравствуйте, denver!
я не вполне осознаю реализацию механизма взаимодействия с сервером именно через винАпи, но но сколько я представляю в случае просмотра такой страницы через браузер все должно быть примерно так:
браузер (Б) обращается к серверу (C) : http get index.html
С в ответ ему отправляет именно этот файл (сгенерив его или как по другому)
соотвественно С создает у себя сессию для этого браузера (и убъет ее по таймауту если придется)
дальше Б анализирует html и види там chapcha.gif или image.php и говорит С: get image.php
север видит что клиент тот же и записывает что выдал тото и тото в информацию о сессии.
потом типа человек (али робот ваш) заполняет поле и Б говорит: post capcha_field=123
сервер опять таки по клиенту восстанавливает что это та самая сессия и проверяет капчу.
так что если у вас можно сделать get два раза в одной сессии и post так же то тогда должно все и так работать. (ну в смысле что надо отдельно наверное загрузить image.php сохранить его как картинку, распознать и проверить)
напишите как проблема решиться. интересно вобщемто.
надеюсь помог.
Ответ отправил: физик фрик (статус: 1-ый класс)
Ответ отправлен: 07.01.2008, 02:13
Вопрос № 117.312
Помогите пажлуста решить задачу Текст задачи таков
Дана целочисленная прямоугольная матрица надо опредилить № строки в которой находится самая длинная серия одинаковых элементов
Отправлен: 07.01.2008, 10:24
Вопрос задал: Razum89 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Maksim Trofimov
Здравствуйте, Razum89!
Как-то давно я это делал. Решил я эту задачу своеобразно - использовал сортировку.
Текст программы получился не маленький :)
#include <stdio.h>
#define compGT(a,b) (a > b)
typedef int T; // Тип элемента для сортировки
typedef int tblIndex; // тоже самое сдесь подставить...
// Сортировка включением
void insertSort(T *a, tblIndex lb, tblIndex ub) {
T t;
tblIndex i, j;
int main(void)
{
// исходная матрица
int arr[3][5] = { {1,1,3,1,3}, {1,0,1,2,2}, {3,3,2,3,3} };
// матрица stat для хранения числа(stat[n][1]) и его
// повторений(stat[n][0]) в соответствующей строке матрицы arr
int stat[3][2] = {0,0, 0,0, 0,0};
unsigned i, j, count = 1;
// здесь мы перебираем элементы матрицы и
// записываем число повторений какого-то числа
// в stat[n][0], а само число в stat[n][1]
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
if(arr[i][j] == arr[i][j+1])
count++;
else
{
if(stat[i][0] < count)
{
stat[i][0] = count;
count = 1;
stat[i][1] = arr[i][j];
}
}
}
if(stat[i][0] < count) {
stat[i][0] = count;
stat[i][1] = arr[i][j];
}
count = 1;
}
// в полученной матрице stat ищим максимальное
// число повторений и выводим соответствующий этому элемент
for(i = 1, j = stat[count = 0][0]; i < 3; i++)
if(j < stat[i][0]) {
j = stat[i][0];
count = i;
}
printf("Number %d, Column %d
", arr[count][1], count+1);
return 0;
}
Ответ отправил: Maksim Trofimov (статус: 4-ый класс)
Ответ отправлен: 07.01.2008, 12:25 Оценка за ответ: 5
Отвечает: Терсков Сергей
Здравствуйте, Razum89!
Попробуйте использовать функцию, приведенную в приложении. На вход она получает саму матрицу и ее размеры. Выход - номер строки с максимальной последовательностью.
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 09.01.2008, 04:44
Вопрос № 117.321
Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста!
Необходимо отсортировать строчный массив arr по длине содержащихся в нем строк методом обмена ("пузырьковым")... Я вот накатал, только ни фига не работает... Что не так?
Большушее спасибо!
Приложение:
Отправлен: 07.01.2008, 11:58
Вопрос задал: Mangoost (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Попов А.С.
Здравствуйте, Mangoost!
в приложении исправленный листинг
Приложение:
Ответ отправил: Попов А.С. (статус: 4-ый класс)
Ответ отправлен: 07.01.2008, 13:30
Отвечает: Ross
Здравствуйте, Mangoost!
В C сравнивать строки операцией < некорректно, вместо этого нужно использовать функцию strcmp (для лексикографического сравнения) или strlen (для сравнения длины строк).
Кроме того, очень неэффективно пользоваться функцией strcpy для обмена строк в массиве, гораздо лучше использовать массив указателей и менять их значения (подробнее в книге Б. Керниган "Язык программирования С" гл 5.6).
Вот рабочий код:
Приложение:
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 08.01.2008, 00:47
Вопрос № 117.357
С рождеством вас,уважаемые эксперты. Помогите разобрать что делает эта задача(если не трудно просто подписать коментариии к каждой строчке)
Заранее спаибо.
Приложение:
Отправлен: 07.01.2008, 16:14
Вопрос задал: Pimp (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Попов А.С.
Здравствуйте, Pimp!
Коментарии смотрите в приложении
ps Этот код даже компиляцию не пройдет, исправленная версия также в приложении
Приложение:
Ответ отправил: Попов А.С. (статус: 4-ый класс)
Ответ отправлен: 07.01.2008, 17:13
Отвечает: X-men
Здравствуйте, Pimp!
В приложении написана дополненная программа.
Если я правильно понял, она должна в массиве искать элементы, делящиеся на 3 без остатка и выводить среднее арифметическое таких элементов.
Переменные r и b в главной функции не нужны (также, как и параметры функции arifm).
Приложение:
Ответ отправил: X-men (статус: 3-ий класс)
Ответ отправлен: 07.01.2008, 17:31
Вопрос № 117.361
Уважаемые эксперты! есть задача по нахождению значения функции: ---------------------------------------------------- Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.
ax2-сх+b при x+10<0 и b≠0 F= (x-a)/(x-c) при x+10>0 и b=0 -x/(a-c) в остальных случаях
где a,b,c – действительные числа. Функция F должна принимать действительное значение, если выражение (Ац ИЛИ Вц) И НЕ (Ац ИЛИ Сц) не равно нулю, и целое значение
в противном случае. Через Ац, Вц и Сц обозначены целые части значений a,b,c, операции НЕ, И, ИЛИ – поразрядные. Значения a,b,c, Хнач., Хкон., dX ввести с клавиатуры. ------------------------------------------------------- Теперь суть проблемы моей: Если известен диапазон в котором должно быть значение функции F, пусть он будет |F|Может какую прогу подскажете, в которой подобные рассчеты можно сделать.
P.S. Буду реализовывать это на Си.Вопрос задан еще и в разделы "решение нетривиальных задач" и "алгоритмы".
Отправлен: 07.01.2008, 16:26
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: X-men
Здравствуйте, Warobushek!
Советую вам поступить следующим образом: взять лист бумаги, расписать на нём все исходные данные, далее рассчитать по имеющимся формулам эту функцию (нарисовать таблицу со всеми значениями функции и с результатами расчетов этой функции), подставить эти исходные данные в вашу программу и, если программа выведет тоже самое, что и написано у вас на листике (см. пункт 1), то программа работает нормально (по крайней мере с такими исходными данными).
Было бы нелишним вычислить ОДЗ функций (особенно это актуально во 2ой и 3ей функции [там где есть деление {на случай, если будет деление на ноль}]).
Для проверки 1-ой и 3-ей формулы попробуйте взять такие исходные данные: x1=-12, х2=-8, а=1, b=2, с=3, dx=1.
Должно получиться примерно следующее:
1. f(-12) = 1*(-12)^2 - 3*(-12) + 2 = 144 + 36 + 2 = 182
2. f(-11) = 1*(-11)^2 - 3*(-11) + 2 = 121 + 33 + 2 = 156
и так далее
Ответ отправил: X-men (статус: 3-ий класс)
Ответ отправлен: 07.01.2008, 17:03
Вопрос № 117.383
Необходимо построить иерархию классов согласно схеме наследования, приведенной в варианте задания. Каждый класс должен содержать минимум одну переменную с доступом типа private и функции-аксессоры ( get, set и show ). Функция main должна иллюстрировать иерархию наследования.
Отвечает: Maksim Trofimov
Здравствуйте, смирнов, александр, олегович!
Не пугайтесь ключевого слова virtual, что ниже в примере. virtual я здесь использовал, чтобы избежать повторений кода, при наследовании классов.
#include <iostream>
class B
{
private:
char data;
public:
char get(void) {
return data;
}
void set(char c) {
data = c;
}
};
class D1: public B
{
};
class D2: virtual private B
{
public:
char get(void) {
return B::get();
}
void set(char c) {
B::set(c);
}
};
class D3: virtual private B
{
public:
char get(void) {
return B::get();
}
};
class D4: private D1
{
public:
char get(void) {
return D1::B::get();
}
void set(char c) {
D1::set(c);
}
};
class D5: public D2, private D3
{
public:
void set(char c) {
D2::set(c);
}
char get(void) {
return D3::get();
}
};
int main(void)
{
using namespace std;
D5 d5;
d5.set('5');
cout << d5.get() << endl;
D4 d4;
d4.set('4');
cout << d4.get() << endl;
cin.get();
return 0;
}
Ответ отправил: Maksim Trofimov (статус: 4-ый класс)
Ответ отправлен: 08.01.2008, 03:19 Оценка за ответ: 5 Комментарий оценки: Огромное спасибо!!!!
Вопрос № 117.384
Помогите написать програмку.
Программа случайным образом тасует колоду из 36 карт, раздаёт карты N игрокам, определяет козырную масть и игрока с правом первого хода. Количество игроков N и их имена вводятся с клавиатуры.
или привидите алгоритм как случайно перемешать массив чисел (int ar[5] = {1,2,3,4,5};)
Спасибо.
Отправлен: 07.01.2008, 19:32
Вопрос задал: Slade (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: X-men
Здравствуйте, Slade!
В приложении - программа, перемешивающая массив чисел.
Запускай в VC++
Приложение:
Ответ отправил: X-men (статус: 3-ий класс)
Ответ отправлен: 07.01.2008, 19:47
Вопрос № 117.387
Создать класс с заданными полями :
Транспорт (стоимость проезда, количество единиц в парке, рентабельность, название)
Создать конструктор без параметров (для начальной инициализации)
Создать массив из 5 объектов заданного класса
Написать функцию для изменения значений полей (с помощью ссылок)
Написать функцию для форматированного вывода всех классов на экран (упорядоченных по первому полю)
* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.
Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!
Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.
Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.