Вопрос № 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 объектов заданного класса
Написать функцию для изменения значений полей (с помощью ссылок)
Написать функцию для форматированного вывода всех классов на экран (упорядоченных по первому полю)