Вопросы по программированию

Автор Богдан, 03 Листопад 2007, 11:41:18

Попередня тема - Наступна тема

βεερ_βooρ

Цитата: Богдан від 14 Грудень 2007, 11:34:58
Заменил условие на
    (m[1][3]==m[2][3])&&(m[2][3]==m[3][3])
Но всё же не понял, как порядок влияет на результат условия.
Цитата: beep_boop від 14 Грудень 2007, 00:11:31
3) Математическая запись a=b=c не эквивалентна сишной a==b==c
А теперь рассмотрим модельный пример.
#include<stdio.h>
int main(int argc, char *argv)
{
int i,j,k;
i=1;
j=0;
k=2;
printf("i=%i\nj=%i\nk=%i\n",i,j,k);

Итак вначале у нас i=1 j=0 k=2
Что у нас происходит в выражениях под if?

if(i==j==k) puts("i==j==k");

Приоритет одинаковых операций одинаковый(кто бы сомневался :)), поэтому обработка операций будет вестись слева направо(Денис Ритчи не был арабом)
i=1, j=0 поэтому выражение i==j ложно, т.е.  (i==j) будет равно 0. (В С допускается некоторая небрежность с типами данных, в часности любое ненулевое целое может трактоваться как истинна, а 0 как ложь)
0==2 - ложь, поэтому puts не вызывается.

if(i==k==j) puts("i==k==j");

i==k ложно(1 не равно 2 :))
Дальше компилятор берется за сравнение с j(которая равно 0)
Поскольку результат операции сравнения тут трактуется  как int(а не bool), то мы получим абсолютно истинное утверждение: 0==0 и вызов  puts("i==k==j"); будет осуществлен.

if(j==i==k) puts("j==i==k");
if(j==k==i) puts("j==k==i");
if(k==j==i) puts("k==j==i");
if(k==i==j) puts("k==i==j");

return 0;
}

Думаю дальше должно быть понятно.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан


Богдан

#52
Сейчас сижу на олимпиаде.

Вот-вот начнется.

Апдейт. Задачи были такие:

1. Есть прямоугольник, от которого — пока возможно — отрезается квадрат максимальной площади. Стороны прямоугольника — натуральные числа. Определить количество квадратов. ( 20 баллов ).

Записать и считать входные и выходные данные из файлов... бла-бла-бла.

/* Эту я решил :-)

while(a!=b)
{
  a<b?b-=a:a-=b; c++;
};c++;


с — количество квадратов */

2. Дано натуральное число, кол-во цифр не больше 256. Определить количество разных цифр в числе. ( 30 баллов )

Записать/считать с файлов таких-то... Короче.

/* Бл. Я врубил, как ее решать за 10 минут до конца отведенного времени и не успел отладить. Но то, к чему додумались мои непрограммистские мозги выглядело так:

( n — число в виде массива; e — цифры, которые есть в числе; i,j,k — объявленные переменные типа int, _ — boolean, c — искомое кол-во цифр )

for(i=0;i<256;i++)
{
  _=false;
  if(n[i]!='\0')
{
   for(j=0;j<10;j++)
   {
     if(e[j]==n[i]){_=true;break;}else{k=j;}
   }
   _?c++:n[i]=e[k];
}else{break;}
}


Ну, что-нибудь похожее на это.

По-моему, все правильно: берем цифру числа, проходимся по массиву уже упомянутых цифр; если совпадения есть — кидаем единичку в счетчик, ежели их нет — добавляем циферь в массив упомянутых.

Компилятор скушал такой код без мата, но прога, когда доходила до этого цикла, вылетала. Вобщем, не успел найти я ошибку... */

3. Типа самая моднявая. У мужика плохая привычка ( а мужик — директор банка ) перелаживать драгоценности из сейфа в сейф в определенном порядка — он лунатик. В файле входных данных первое число — количество сейфов, а начиная со следующей строки — последовательность. «k-ий член послідовності — це номер сейфу, куди майор, — мужик, — перекладає вміст k-го сейфу першої ночі.»

Требуется узнать, через сколько ночей содержимое сейфов вернется на свои места. ( аж 50 баллов )

Пример входных данных:
5
2 3 1 5 4

Ответом тогда должно быть число 6.

/* Я вроде понял алгоритм решения этой задачи, то и сё, но так за(кол)ебался ее отлаживать, что оставил и принялся за вторую ( за 10 минут до конца времени :-) ). */

βεερ_βooρ

Цитата: Богдан від 16 Грудень 2007, 16:03:45
3. Типа самая моднявая.
Первые 2 - утешительно-разминочные ;)
Цитата: Богдан від 16 Грудень 2007, 16:03:45
У мужика плохая привычка ( а мужик — директор банка ) перелаживать драгоценности из сейфа в сейф в определенном порядка — он лунатик. В файле входных данных первое число — количество сейфов, а начиная со следующей строки — последовательность. «k-ий член послідовності — це номер сейфу, куди майор, — мужик, — перекладає вміст k-го сейфу першої ночі.»
Задача классическая, я помню, что обещал сбросить подборку задачь с решениями(в основном на Паскале), но до школы я так и не добрался(в универе завал перед сессией) :(

ЗЫ Это была районная олимпиада?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Богдан

Цитата: beep_boop від 16 Грудень 2007, 17:20:10
Первые 2 - утешительно-разминочные ;)
Я решил только одну из них, а ты еще меня в "лучшего программиста" номинировал :-)
Цитата: beep_boop від 16 Грудень 2007, 17:20:10
ЗЫ Это была районная олимпиада?
Угу.

Iceteed

а вот какие у нас задачи были в 11ом классе:

1) Звичайний комплект доміно містить 28 костей. Якщо кількість точок на костях змінювалася б не від 0 до 6, а від 6 до деякого k, (k <= 1000000), то, очевидно, кількість костей була б іншою. Напишіть програму, яка визначила б, скільки костей містить такий комплект доміно.

2) Номер, який посвідчує особу, складається з семи цифр і літери, яку додають в кінці запису праворуч. Ця літера обчислюється певним методом і залежить від цифр та іх позиції у номері. Для її розрахунку використовується такий метод:
1. Помножити кожну цифру номера на її вагу. Позначимо вагу цифр: першої - 2, другої - 7, третьої - 6, четвертої - 5, пятої - 4, шостої - 3, сьомої - 2.
2. Скласти отримані добутки.
3. Знайти залишок від ділення результату на 11.
4. Порівняти залишок з великою літерою латиниці наступним чином: 0 = J, 1 = A, 2 = B, 3 = C, 4 = D, 5 = E, 6 = F, 7 = G, 8 = H, 9 = I, 10 = Z.
Наприклад, цифри номера 6830907, програма виведе літеру D.

3) Положення виконавця (offtop - чому виконавця - незрозуміло =)))) ) в будь який момент часу задається координатами на координатній площині та напрямом. У початковий момент виконавець знаходиться у точці з координатами (0, 0) та орієнтований вгору. Система команд виконавця:
   L - поворот на 90(градусів, звичайно) ліворуч
   R - поворот на 90 праворуч
   F - переміщення вперед на 1
Після виконання певної послідовності команд виконавець опинився у точці з координатами (X, Y). Напишіть програму, яка визначає найкоротшу відстань між початковим та кінцевим положенням виконавця.
З клавіатури вводиться послідовність команд. На екран виводиться одне число - найкоротша відстань між початковим та кінцевим положенням виконавця з точністю (10)-3.

4) У магазині кондвиробів лежить ряд пакетів з цукерками. Відома кількість цукерок у кожному пакеті. Покупець може взяти в одну руку два пакети, які лежать поряд, і в другу - два пакети, які теж лежать поряд (можливо в іншому місці ряду). При цьому він хоче, щоб кількість цукерок у чотирьох пакетах, взятих ним, була максимальною. З клавіатури вводиться число пакетів (4 <= N <= 80) - кількість пакетів з цукерками. далі вводиться  N чисел - кількість цукерок у кожному пакеті. На екран виводиться чотири числа - номери пакетів, які обере покупець (перші два числа - ті, які він візьме у одну руку, другі два числа - в іншу)


Также был выбор - испоьзовать схему клавиатура-input, экран-output, либо делать входной и выходной файл.
Градация оценивания - 1) задача - 5 баллов, 2) 10, 3) 15, 4) 20.
Особой сложности задания не представляют  ;D

Edd.Dragon

Цитата: Богдан від 14 Грудень 2007, 11:34:58
Заменил условие на
    (m[1][3]==m[2][3])&&(m[2][3]==m[3][3])
Но всё же не понял, как порядок влияет на результат условия.

При чем тут порядок?!!!

1==2==0

Сначала процессор выполняет сравнение 1==2
Результат этого сравнения 0 (false)

Что получили в результате?
0==0

Результат этого сравнения - "ТАКИ ДА!"  :D

Или другими словами:

(1==2==0)  <==> ((1==2)==0) <==> ((0)==0) <==> true (не ноль)

Так понятнее? ;)

Edd.Dragon

#57
Цитата: Богдан від 16 Грудень 2007, 16:03:45
2. Дано натуральное число, кол-во цифр не больше 256. Определить количество разных цифр в числе. ( 30 баллов )

/* Бл. Я врубил, как ее решать за 10 минут до конца отведенного времени и не успел отладить. Но то, к чему додумались мои непрограммистские мозги выглядело так:

( n — число в виде массива; e — цифры, которые есть в числе; i,j,k — объявленные переменные типа int, _ — boolean, c — искомое кол-во цифр )

for(i=0;i<256;i++)
{
  _=false;
  if(n[i]!='\0')
{
   for(j=0;j<10;j++)
   {
     if(e[j]==n[i]){_=true;break;}else{k=j;}
   }
   _?c++:n[i]=e[k];
}else{break;}
}


Ну, что-нибудь похожее на это.
По-моему, все правильно: берем цифру числа, проходимся по массиву уже упомянутых цифр; если совпадения есть — кидаем единичку в счетчик, ежели их нет — добавляем циферь в массив упомянутых.
Компилятор скушал такой код без мата, но прога, когда доходила до этого цикла, вылетала. Вобщем, не успел найти я ошибку... */


int countUniqueDigits(const char* number)
{
   int digitMap[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   int i = 0, count = 0;

   if(number)
   {
      while(number[i]) { digitMap[number[i++] - '0']++; }
      for(i = 0; i < 10; i++)
      {
         if(digitMap[i]) { count++; }
      }
   }
   return count;
}

int main(int argc, char* argv[])
{
   cout << countUniqueDigits((argc > 1) ? argv[1] : NULL) << endl;
}


А в ваш отрывок без видения всего кода мой встроеный "дебаг" что-то отказывается протестить на вылет %) Хез, масса предположений может быть. Пошаго прогоняя, где ложится?

βεερ_βooρ

Цитата: edd_k від 18 Грудень 2007, 12:05:53
При чем тут порядок?!!!
При том, что операции выполняются слева направо ;)
Цитата: edd_k від 18 Грудень 2007, 12:05:53
1==2==0

Сначала процессор выполняет сравнение 1==2
Результат этого сравнения 0 (false)

Что получили в результате?
0==0

Результат этого сравнения - "ТАКИ ДА!"  :D

Или другими словами:

(1==2==0)  <==> ((1==2)==0) <==> ((0)==0) <==> true (не ноль)

Так понятнее? ;)
Я же уже вроде пояснил, и человек понял? ???
Я что-то упустил?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: beep_boop від 19 Грудень 2007, 18:23:20
Я же уже вроде пояснил, и человек понял? ???
Я что-то упустил?

Нет, это я проглядел  :-\

Viki

Возможно ли программно взять du/dx, u=f(x,y)?

βεερ_βooρ

Цитата: Viki від 23 Грудень 2007, 12:34:25
Возможно ли программно взять du/dx, u=f(x,y)?
Да.
Вам нужно взять производную в символьном виде?
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Viki


βεερ_βooρ

#63
Цитата: Viki від 23 Грудень 2007, 13:58:34
Да
Сам сабж называется Automatic differentiation.
Необходимая вам информация содержиться в Википедии, тут и в архивах публикаций ACM :)

Не все перечисленные там программы и пакеты умеют выполнять автоматическое символьное дифиренцирование. Однако кажеться(хотя я могу и ошибаться), что  ADOL-C может.

ЗЫ А зачем вам это надо? Если надо просто что-то подсчитать для расчетки по матану, то maxima - лучший выбор :D
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Viki

Цитата: beep_boop від 23 Грудень 2007, 14:49:00
ЗЫ Если надо просто что-то подсчитать для расчетки по матану, то maxima - лучший выбор :D
В ходе решения задачи на сpp надо брать производную...наверно действительно придется взять ее самой и занести в код уже результат.

βεερ_βooρ

Цитата: Viki від 23 Грудень 2007, 15:20:56
В ходе решения задачи на сpp надо брать производную...наверно действительно придется взять ее самой и занести в код уже результат.
Ф-ция фиксированная(известная на момент разработки прораммы)? Тогда намного лучше зарание взять производную(что тут сложного?) - расходовать ресурсы ЦП на подобные мелочи - непростительно(вот если ф-ция становиться известной во время выполнения - то тогда уже и будите вычислять, а так - ручками)
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: Viki від 23 Грудень 2007, 15:20:56
В ходе решения задачи на сpp надо брать производную...наверно действительно придется взять ее самой и занести в код уже результат.
1. Если функция жестко определена, а не произвольная, то конечно желательно вычислить ее производную и запрограммировать уже результирующую функцию.

2. Если исходная функция произвольная, т.е. определяется в ходе выполнения программы, то
- Если результат нужен для последующих вычислений, на то есть численные методы, позволяющие получить производную в нужной точке с нужной точностью. Аналитическое решение тут не нужно.
- Если результат нужен для вывода пользователю в аналитическом виде, то самому реализовывать такой функционал геморно, лучше тогда запрограмить это например в МathLab.

Viki

Цитата: beep_boop від 23 Грудень 2007, 15:56:30
Тогда намного лучше зарание взять производную
Цитата: edd_k від 24 Грудень 2007, 00:16:19
Если функция жестко определена, а не произвольная, то конечно желательно вычислить ее производную и запрограммировать уже результирующую функцию.
Спасибо. Я так и сделала.
Цитата: beep_boop від 23 Грудень 2007, 15:56:30
(что тут сложного?)
Думала можно как-то программно написать v=du[x,y]/dx и пусть само считает, всеравно функция u уже была занесена в код  :)

βεερ_βooρ

Цитата: Viki від 24 Грудень 2007, 01:26:56
Думала можно как-то программно написать v=du[x,y]/dx и пусть само считает, всеравно функция u уже была занесена в код  :)
Программисты МС тоже так думают. Намек ясен? ;)
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

snegoviK

#69
Может баян, а может и нет.

Если кто-нибудь столкнётся с написанием динамически загружаемых библиотек, вот статья, которая мне очень понравилась:

http://www.linuxjournal.com/article/3687

Тут описывается написание и загрузка библиотек на Linux, но модель легко адаптировать под WinAPI. :)

Еще один "трюк", который мне очень понравился и до которого я сразу не додумался. :) Создание 2-dimensional arrays (custom classes):


using namespace std;
vector< vector<MyClass> > foo(n, vector<MyClass>(m) ;

βεερ_βooρ

Цитата: snegoviK від 03 Січень 2008, 19:20:26
Тут описывается написание и загрузка библиотек на Linux,
Хех... трудности перевода.
Оригинальное название: Dynamic Class Loading for C++ on Linux
Там охватыветься несколько более широкая тема, чем банальное использование dlopen и создание so.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

#71
Цитата: snegoviK від 03 Січень 2008, 19:20:26
Еще один "трюк", который мне очень понравился и до которого я сразу не додумался. :) Создание 2-dimensional arrays (custom classes):


using namespace std;
vector< vector<MyClass> > foo(n, vector<MyClass>(m) ;


Почему трюк? Standart Template Library считается практически неотъемлимой частью современного C++. Только чем больше вложеность шаблонов, тем сложнее будет отлаживать ошибки - при сообщениях об ошибках будут вываливаться такие МОНСТРЫ, что глаза тут же расходятся на 180 градусов! :D

Хорошо, если нужна 2-мерная матрица int-ов. А если 3-мерная string-ов, которые в свою очередь тоже являются шаблоном?! Это уже клиника будет. Потому, под n-мерные матрицы желательно иметь специальный шаблон.

P.S.: На Дельфи динамические (безразмерные) массивы точно так же объявляются

Array Of Integer;
Array Of Array Of Integer;

и т.д.

snegoviK

C "монстрами" я уже познакомился. :)

Речь идет не о generic типах.

2D array of ints:

int foo[50][50];

Тут проблем нет. А когда я создал свой собственный класс и мне компилятор предложил оверлоуднуть [] оператор, тут я и задумался. :)

Edd.Dragon

Цитата: snegoviK від 05 Січень 2008, 14:43:56
C "монстрами" я уже познакомился. :)

Речь идет не о generic типах.

2D array of ints:

int foo[50][50];

Тут проблем нет. А когда я создал свой собственный класс и мне компилятор предложил оверлоуднуть [] оператор, тут я и задумался. :)

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

А уж когда в прнципе невозможно заранее узнать размер матрицы, то сам бог велел ввести класс (или использовать уже готовый), удобно и надежно реализующий требуемый комплексный тип данных.

-Programmer-

Народ помогите плиз. Есть задание по Си:
Дана квадратная матрица порядка n (n-четное). Является ли она симметричной, если ее сложить вдвое по вертикали?
Тема лабы: матрицы и многочлены, что в принципе понятно из задания. Так вот меня конкретно интересует что именно здеся надо делать? Просто обьясните пожалуйста ход действий. Особенно я не понял как "сложить вдвое по вертикали" матрицу...

βεερ_βooρ

Цитата: -Programmer- від 13 Січень 2008, 22:02:19
Особенно я не понял как "сложить вдвое по вертикали" матрицу...
Я честно говоря тоже... В задании точно написана, что исходная  матрица квадратная? Ибо после складывания по вертикали мы получим прямоугольную матрицу, о которой бесмысленно говорить о главной диагонали, а следовательно о симметричности.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

-Programmer-

Вот то-то и оно что квадратная  :-\. Задание перечитал несколько раз во всех направлениях, но смысла так и нашел...

Edd.Dragon

Я так понял, что "сложить по вертикали" для того и указано, что симметрию этой матрицы надо выяснить не по диагонали, а видимо "является ли правая половина вертикальным отражением левой".

Если так, то нужно первый столбец сравнить с последним, второй с предпоследним и т.д. пока не дойдем до центра.

-Programmer-

edd_k спасибо это уже хоть что-то. Но для большей уверенности еще кто-нибудь сможет подтвердить слова edd_k?

βεερ_βooρ

Цитата: edd_k від 14 Січень 2008, 11:36:01
Я так понял, что "сложить по вертикали" для того и указано, что симметрию этой матрицы надо выяснить не по диагонали, а видимо "является ли правая половина вертикальным отражением левой".
Хм... тогда бы так и написали, вообщем:
Цитата: -Programmer- від 14 Січень 2008, 11:48:37
edd_k спасибо это уже хоть что-то. Но для большей уверенности еще кто-нибудь сможет подтвердить слова edd_k?
Спроси лучше у препода, который составлял задание ;) Ибо кто знает какие у него тараканы в голове.
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Edd.Dragon

Цитата: -Programmer- від 14 Січень 2008, 11:48:37
Но для большей уверенности еще кто-нибудь сможет подтвердить слова edd_k?
Соглашусь с предыдущем оратором - препод может  :D

Pulver

Обьясните пожалуйста как работать с файлами в С++ Билдер, как в С++ работать я знаю - в билдере ети знания лежат грузом, знания с делфи делают примерно тоже самое, я хотел бы понять как создать файл .ТХТ и записать в файл .ТХТ какие-то переменные, как записать мемо и прочитать файл в мемо я тоже знаю.

Edd.Dragon

Билдер, Дельфи, Вижуал Студия - все это интегрированые среды разработки, которые интегрируют в один удобный визуальный интерфейс
- редактор кода;
- утилиты для редактора кода (подсветка, поиск и т.д.);
- систему справки;
- компилятор;
- дебагер;
- прочие утилиты.

Т.е. Билдер в изначальной сути - это оболочка и не более того. Кроме самой оболочки Дельфи и Билдер предоставляют широкую библиотеку классов.

А теперь вернемся к работе с файлами. Почему ты думаешь, что в Билдере это должно происходить как-то иначе? Используй стандартные библиотеки С или С++. Если ты знаешь С++, то значит знаешь о потоках ввода-вывода. Что тебе мешает использовать потоковый ввод-вывод в Билдере так же как в любой другой оболочке или при ее отсутствии?

Pulver


Цитата: edd_k від 11 Лютий 2008, 15:12:43
Почему ты думаешь, что в Билдере это должно происходить как-то иначе? Используй стандартные библиотеки С или С++. Если ты знаешь С++, то значит знаешь о потоках ввода-вывода.
Знаю я и о том што такое билдер и о том как работать с потоками ввода вывода в С++, писал около восьми лаб токо по файлам поетому сразу и попробовал то што посоветовали...абсолютно рабочая прога С++ не воспринимается как таковая в билдере, пробовал искать в литературе и тряс учителей - нигде нету нихто не знает, мои проги по работе с файлами в делфи тоже не помогают..

В HELP нашел какие-то команды и примеры но воспользоватся так и не смог - тупое копирование выдает ошибки, а какие именно операнды требуют найденные команды так и не дошло, недаром помощь писали мелкомягкие, на славу постарались, слова понятны все а вот што хотели етим сказать непонятно...я разобрался как создать, переименовать файл, вроде открываю и закрываю файл, но открытие проверить не могу по причине неумения записывать и считывать, нашел атрибуты выставляемые при открытии и работе с файлами - легче от всего етого так и не стало :'( потому и прошу помощи, притом желательно с фоткой или ссылкой на исходник.

Ethereal_horror

Цитата: Pulver від 11 Лютий 2008, 21:24:07
абсолютно рабочая прога С++ не воспринимается как таковая в билдере,
укажите пожалуйста версию С++ Builder. приведите также код "абсолютно рабочей программы" и ошибки, которые выдает компилятор.
может у вас проблема в различном написании ? старый стиль - #include <iostream.h>
новый #include <iostream> и using namespace std. насколько я знаю 6 Builder использует именно старый стиль.
тем более на вероятность этой проблемы указывает и упоминание вами слова "мелкомягие" - вы копировали код из  MS Visual Studio в Builder ? тогда обратите внимание на стили.

Pulver

#85
Цитата: Ethereal_horror від 11 Лютий 2008, 23:01:19
укажите пожалуйста версию С++ Builder.
Borland Enterprise Suite Version 6.0

Примеры брал из TurboC и из MS Visual Studio
Извиняюсь што сразу не написал :-\
Цитата: Ethereal_horror від 11 Лютий 2008, 23:01:19
приведите также код "абсолютно рабочей программы" и ошибки, которые выдает компилятор.

Ето часть примера из TurboC:
Цитата
void poisk(char name[10])
{
char f[10], im[10], z[15], ch[2], mes[2], g[4], poi[15];
char exit='y';
while(exit=='y') {
cout<<"vvedite mesyac poiska ";
cin>>poi;
ifstream fin(name);
i=0;
k=0;
while(!fin.eof())
   {
   fin>>f>>im>>z>>ch>>mes>>g;
   if(!strcmp(poi,mes)) {
      cout<<"\nFamiliya "<<i+1<<"-go cheloveka: "<<f;
      cout<<"\nImya "<<i+1<<"-go cheloveka: "<<im;
      cout<<"\nNomer telephona "<<i+1<<"-go cheloveka: "<<z;
      cout<<"\nData rogdeniya "<<i+1<<"-go cheloveka: "<<ch<<"."<<mes<<"."<<g; k++;}
   i++;
    }
if(k==0) cout<<"Nichego ne naideno!";
cout<<"\nProdolgit y/n ";
cin>>exit;
clrscr();
fin.close(); }
}
остальные примеры не привожу, т. к. не вижу смысла, там в принципе одно и тоже, а в делфях используются функции типа AssignFile которые отсутствуют в С


Цитата: Ethereal_horror від 11 Лютий 2008, 23:01:19
"абсолютно рабочей программы"
Для меня програма работает когда она компилируется и выполняет все функции правильно и без ошибок и орать што компилятор неправильный а прога правильная я перестал еще курса три назад, когда паскаль учили. 

Нащет
Цитата: Ethereal_horror від 11 Лютий 2008, 23:01:19
может у вас проблема в различном написании ? старый стиль - #include <iostream.h>
новый #include <iostream> и using namespace std. насколько я знаю 6 Builder использует именно старый стиль.
тем более на вероятность этой проблемы указывает и упоминание вами слова "мелкомягие" - вы копировали код из  MS Visual Studio в Builder ? тогда обратите внимание на стили.
я по своему компилятору не лазил и не настраивал его, а по умолчанию iostream он подключает сам, да и #include <fstream.h> в билдер я дописать не забыл, как и в проге которой пользовался как примером работы с файлами при пробах в билдере

оказывается в билдере нету fin и fout по крайней мере компилятор так пишет да и в помощи их нет, ето было для меня большим разочарованием.


Также пробовал FileOpen, FileSeek, FileRead может чегото недопонял но пример из Help'а (ищем любой из етих операторов->Example) у меня не пошол, притом ругалось на строку(пример не привожу из-за и так немалого размера ответа)
pszBuffer = newchar[iFileLength+1];
таким образом
[C++ Error] Unit1.cpp(35): E2451 Undefined symbol 'newchar'
Без етой строки програма запускается но при нажатии кнопки выдает:
raised exception class EAccessViolation with message 'Access violation at adress 01194302. Read of address 0012000b'. Process stoped. Use Step or Run to continue.

Когда продолжаем то получаем обьяснение:
Can't perform one of the following file operations: Open, Seek, Read, Close.
то биш Try не сработал как нада.

функции ReadFromFile и LoadToFile я знаю, мне они не подходят так как работают токо с мемо.

так што по прежнему прошу работающий исходник именно из С++ билдера с записью в файл и чтением из файла

snegoviK

#86
Немного не в тему, но почему аргумент функции char name[10], а не скажем char *name или std::string &name?

Программа спокойно компилируется на VS8 после след. изменений (жирный шрифт)

[b]#include <iostream>
#include <fstream>

using namespace std;[/b]

void poisk(char name[10])
{
char f[10], im[10], z[15], ch[2], mes[2], g[4], poi[15];
char exit='y';
while(exit=='y') {
cout<<"vvedite mesyac poiska ";
cin>>poi;
ifstream fin(name);
[b]int[/b] i=0;
[b]int[/b] k=0;
while(!fin.eof())
   {
   fin>>f>>im>>z>>ch>>mes>>g;
   if(!strcmp(poi,mes)) {
      cout<<"\nFamiliya "<<i+1<<"-go cheloveka: "<<f;
      cout<<"\nImya "<<i+1<<"-go cheloveka: "<<im;
      cout<<"\nNomer telephona "<<i+1<<"-go cheloveka: "<<z;
      cout<<"\nData rogdeniya "<<i+1<<"-go cheloveka: "<<ch<<"."<<mes<<"."<<g; k++;}
   i++;
    }
if(k==0) cout<<"Nichego ne naideno!";
cout<<"\nProdolgit y/n ";
cin>>exit;
//wtf? clrscr(); // commented cus i dont have this
fin.close(); }
}

int main(void)
{

poisk("jokez.txt");
return 0;
}


Причем тут Delphi? Что значит нет fin/fout? Есть ofstream и ifstream, fin/fout судя по вашему коду просто названия перменных.

βεερ_βooρ

Цитата: snegoviK від 12 Лютий 2008, 01:10:50
Немного не в тему, но почему аргумент функции char name[10], а не скажем char * name
Хм, технически это вообщем-то одно и то же(эквивалентность указателя и массива).
Цитата: snegoviK від 12 Лютий 2008, 01:10:50
Программа спокойно компилируется на VS8 после след. изменений (жирный шрифт)
Для тега цитирования не работает bb-code
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

snegoviK

#88
Цитата: beep_boop від 12 Лютий 2008, 01:22:53
Хм, технически это вообщем-то одно и то же(эквивалентность указателя и массива).


        void poisk(char name[10])
        {
  printf("%x\n", name);
  exit(0);
          //...
}

        int main(void)
        {
  char name[] = "jokez.txt";
          printf("%x\n", name);
          poisk(name);
          //...
        }


Output:
12ff54
12ff54

Сорри, чет показалось мне что в случае аргумента такой синтаксис создаёт еще один массив и копирует данные. Ошибся.

Pulver

#89
Цитата: snegoviK від 12 Лютий 2008, 01:10:50
#include <iostream>
#include <fstream>

using namespace std;


//wtf? clrscr(); // commented cus i dont have this
fin.close(); }
}
clrscr(); ето функция очищения екрана консоли из библиотеки conio.h если я не ошибаюсь(хотя библиотеку могу и напутать).
Цитата: snegoviK від 12 Лютий 2008, 01:10:50
Причем тут Delphi? Что значит нет fin/fout? Есть ofstream и ifstream, fin/fout судя по вашему коду просто названия перменных.
да я привык использовать только fin и fout поетому иногда их путаю с ofstream и ifstream
делфи при том што я и из них пытался перетащить работающую програму для решения возникшей проблемы - не получилось т. к.
Цитата: Pulver від 12 Лютий 2008, 00:26:49
в делфях используются функции типа AssignFile которые отсутствуют в С
Цитата: snegoviK від 12 Лютий 2008, 01:10:50
Программа спокойно компилируется на VS8 после след. изменений (жирный шрифт)
Только я тоже чего-то не понял - при чем здесь Visual Studio?
Цитата: Pulver від 12 Лютий 2008, 00:26:49
так што по прежнему прошу работающий исходник именно из С++ билдера с записью в файл и чтением из файла
или билдер и вижуал одно и тоже?
Потомушто если нет то я не понимаю смысла коментария snegoviK'а ведь я писал
Цитата: Pulver від 12 Лютий 2008, 00:26:49
Примеры брал из TurboC и из MS Visual Studio
логично предположить што у меня всетаки есть работающие проги на ету тему в вижуале? как написать так штоб меня поняли - МНЕ НУЖНА ПРОГА ПО РАБОТЕ С ФАЙЛАМИ В BORLAND С++ BUILDER и ни вижуал ни другие языки меня не интересуют?

Edd.Dragon

Цитата: Pulver від 12 Лютий 2008, 00:26:49
Примеры брал из TurboC и из MS Visual Studio
Для меня програма работает когда она компилируется и выполняет все функции правильно и без ошибок и орать што компилятор неправильный а прога правильная я перестал еще курса три назад, когда паскаль учили. 

Также пробовал FileOpen, FileSeek, FileRead может чегото недопонял но пример из Help'а (ищем любой из етих операторов->Example) у меня не пошол, притом ругалось на строку(пример не привожу из-за и так немалого размера ответа)
pszBuffer = newchar[iFileLength+1];
таким образом
[C++ Error] Unit1.cpp(35): E2451 Undefined symbol 'newchar'
Без етой строки програма запускается но при нажатии кнопки выдает:
raised exception class EAccessViolation with message 'Access violation at adress 01194302. Read of address 0012000b'. Process stoped. Use Step or Run to continue.

Ну так чего ж ты не сделал, чтобы этот пример компилировался, а компилятор не ругался? Ты даже не понял, что компилятор тебе говорит! Если ты не понимаешь сути выше приведеной ошибки (язык даже не поворачивается ее так назвать) и пытаешься лечить ее УДАЛЕНИЕМ той строки!... Нет, конечно любой НОВИЧОК в программировании так и сделает. Только, не твои ли это слова?

Цитата: Pulver від 11 Лютий 2008, 21:24:07
Знаю я и о том што такое билдер и о том как работать с потоками ввода вывода в С++, писал около восьми лаб токо по файлам поетому сразу и попробовал то што посоветовали...
Будем меряться пиписьками? Я раньше программил на Дельфи и для себя писал на Билдере всякие библиотеки, в которых нужно было использовать перегрузку операторов (чего в Дельфи нет). Заметь, писал и оно работало. Сейчас я пишу на C++ как в студии, так и под Линуксом в чем попало. Почему же я не заметил особых отличий при программировании во всех этих IDE, да еще и на разных платформах?

А ты С++ знаешь, но когда компилятор тебе четко и ясно говорит "Чувак! А что такое newchar?! Ты мне гденить объясни перед его использованием, ладно?" ты заявляешь - "пример корявый, компилятор шота орет! В топку!"
А может не в топку, а подумать, все-таки претендуешь на программиста, а не на пользователя IDE, коим пока что являешься? Ты массив newchar объявил? Нет. Компилятор тебе говорит - что надо объявить неизвестную ему переменную, а ты не слушаешь и удаляешь строку для исправления ошибки!

- Доктор, у меня рука болит!
- Ща отрежим, не паникуй!  8)

Может стОит, я не знаю, взять побольше глючного кода и потренироваться в общении с компилятором перед тем как с файлами работать? Потому что, даже консультировать удаленно тебя сложновасто - покажи тебе код, ты скажешь, что все неправильно, это код со студии и для билдера не годится, вместо того, чтобы разобраться, где упущена какая-то банальность. Тут без непосредственного видения твоих действий не обойтись.

Цитата: Pulver від 12 Лютий 2008, 09:03:36
логично предположить што у меня всетаки есть работающие проги на ету тему в вижуале?
как написать так штоб меня поняли - МНЕ НУЖНА ПРОГА ПО РАБОТЕ С ФАЙЛАМИ В BORLAND С++ BUILDER и ни вижуал ни другие языки меня не интересуют?
Еще раз повторю - полезный ее код будет одинаков в любой среде программирования для C++. Отличия заключаются лишь в подключении заголовочных файлов или каких-то иных фишек. Ибо и там, и там - C++. Только в студии он соответствует последнему стандарту, а в Борланде постарее - там больше чисто сишных костылей. Выше тебе уже сказали, что вместо <fstream> нужно писать по-старому <fstream.h>

Чтобы убедиться в этом - рекомендую к прочтению вот такую книгу:
http://www.delphimaster.ru/books/978594723302/

Книга по C++ вообще без привязки к IDE, а примеры там есть на Билдере (см. оглавление приложений). Думаешь, тоже не работают? Если ты найдешь эту книгу и посмотришь примеры - сильно удивишься насколько они одинаковые со студийными. Т.е. почти полностью.

А вот собственно живой пример (без заголовков и объявлений, а то опять скажешь, что неправильное фуфло):
http://forum.ru-board.com/topic.cgi?forum=33&topic=4297&start=20#5
Ну и ответь мне - откуда этот пример: из студии или из билдера? Раз сказано, что в основном коде разницы нет, значит так и есть. А почему у тебя хедеры не подрубаются - одному Богу известно, ибо
- ты их НЕ привел в своих примерах и не считаешь это важным;
- ты даже переменные не умеешь объявлять когда компилятор тебе о них КРИЧИТ.

Видел бы твой экран и действия - сказал бы, в чем ты косячишь.

snegoviK

#91
EDIT:

2 Pulver. Постой-постой... Ты зафлудил пол страницы топика, выложил какую-то лабу, которая ты знаешь работает, а код со строкой, которая выдаёт ошибку не выложил? Браво...

Anton T.

Заголовок "Вопросы по программированию" не полностью сути вопроса и должен быть исправлен на "Вопросы по программированию Borland C++ Builder" или подобный.

Bismark

Цитата: AntonT від 12 Лютий 2008, 20:35:42
Заголовок "Вопросы по программированию" не полностью сути вопроса и должен быть исправлен на "Вопросы по программированию Borland C++ Builder" или подобный.
Взагалі то ця тема має вже 5 сторінок і тут вже багато чого говорили про програмування ;)

PS і де взагалі беруться такі люди?? Що за дурна мода тикати носом всіх у назву теми, коли тема обговорюється достатньо давно і ніхто раніше не робив зауважень?
Такі пости сприймаються як звичайнісінький оффтоп!

βεερ_βooρ

Цитата: AntonT від 12 Лютий 2008, 20:35:42
Заголовок "Вопросы по программированию" не полностью сути вопроса и должен быть исправлен на "Вопросы по программированию Borland C++ Builder" или подобный.
Внимательно читаем первый пост, а потом играем в форумчанина-дружинника.  :P
Цитата: snegoviK від 12 Лютий 2008, 18:29:40
2 Pulver. Постой-постой... Ты зафлудил пол страницы топика, выложил какую-то лабу, которая ты знаешь работает, а код со строкой, которая выдаёт ошибку не выложил? Браво...
Цитата: edd_k від 12 Лютий 2008, 09:49:39
Ну так чего ж ты не сделал, чтобы этот пример компилировался, а компилятор не ругался? Ты даже не понял, что компилятор тебе говорит! Если ты не понимаешь сути выше приведеной ошибки (язык даже не поворачивается ее так назвать) и пытаешься лечить ее УДАЛЕНИЕМ той строки!... Нет, конечно любой НОВИЧОК в программировании так и сделает. Только, не твои ли это слова?
А чего вы удивляетесь господа?
После:
Цитата: Pulver від 11 Лютий 2008, 11:03:41
Обьясните пожалуйста как работать с файлами в С++ Билдер, как в С++ работать я знаю - в билдере ети знания лежат грузом, знания с делфи делают примерно тоже самое, я хотел бы понять как создать файл .ТХТ и записать в файл .ТХТ какие-то переменные, как записать мемо и прочитать файл в мемо я тоже знаю.
я сразу выкупил что чувак хелп к VCL не читал... Вообщем по-научному( по классификации сферами Белосельского-Белозерского) это называется тупость.

ЦитатаЭто пространство находится между сферами фиксированной программы
и стереотипного реагирования.
   Тупой человек не может распознать ситуацию, но пытается применить
то, что он видел в качестве успешных действий других. Ярче всего она описана
в русских сказках про дурня (или же в стихотворении Кирши Данилова,
включенном в «Азбуку» Л. Н. Толстого). Лекарство от тупости — как пра-
вило, еще большая тупость: затвердить несколько фиксированных правил
(очень мало, чтобы не сбиваться), и выполнять данную систему правил как
программу с инстинктивными реакциями.

Цитата: edd_k від 12 Лютий 2008, 09:49:39
Будем меряться пиписьками?
:D
Цитата: edd_k від 12 Лютий 2008, 09:49:39
Почему же я не заметил особых отличий при программировании во всех этих IDE, да еще и на разных платформах?
Наверное потому что ты умеешь _программировать_ 8)
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Ethereal_horror

Цитата: edd_k від 12 Лютий 2008, 09:49:39
Почему же я не заметил особых отличий при программировании во всех этих IDE, да еще и на разных платформах?
+1
Цитата: Pulver від 12 Лютий 2008, 09:03:36
и ни вижуал ни другие языки меня не интересуют?
интересно, какой все-таки лучше язык - builder, visual, или, может быть, emacs ?  :D

βεερ_βooρ

Цитата: Ethereal_horror від 12 Лютий 2008, 22:16:18
+1интересно, какой все-таки лучше язык - builder, visual, или, может быть, emacs ?  :D
vim :D
Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering.
All that's here is Fear! Suppression! Betrayal! Despair! Contempt! Regret! Sadness! Anguish! Madness! And Pain, right?

Pulver


Edd.Dragon

Цитата: Pulver від 13 Лютий 2008, 11:16:18
Ошибку понял - не смешно :(
Ничего страшного, иногда лучше поржать над своими ошибками - лучше запомнится ;)

Fersifex

#99
Скажите, плиз, почему у меня при
gcc file_name.cpp
выдается длинный перечень "чего-то там"?
Например обычный "Hello world" почти втупую списанный с учебника:
#include <iostream>
using namespace std;

int main ()
{
    cout << "Hello, world!";

    return 0;
}



[вложение удалено ради получения свободного места]
Книга - это зеркало, и если в него смотрится обезьяна, то оттуда не может выглянуть лик апостола