A A A A Автор Тема: Программирую приложения по астрономии. Есть вопросы.  (Прочитано 3706 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат
Правильно, потому что перестало выполняться одно из условий - sum_a < 250
Всё стало не  понятно. Оператор && объединяет два условия первое И второе вместе.
А одно из  - это ИЛИ.
Или я туплю под вечер?   :)
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Toth

  • *****
  • Сообщений: 2 990
  • Благодарностей: 219
    • Сообщения от Toth
Оператор && объединяет два условия первое И второе вместе.
Да, при И должны выполняться ОБА условия, чтобы продолжался цикл for.
А если ИЛИ || - то должно выполняться хотя бы одно.
Canon PowerShot SX130 IS

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат
Toth, всё, догнал, спасибо.  :good:
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Karagy

  • *****
  • Сообщений: 1 784
  • Благодарностей: 62
    • Сообщения от Karagy
А в блоке сравнения получается что нельзя?  Или всё же можно?  Почему не работает?
Ищите и читайте что такое comma operator.

Оффлайн Ph_user

  • *****
  • Сообщений: 2 943
  • Благодарностей: 79
    • Сообщения от Ph_user
Такое ощущение,  что указатели это инородная вставка из другого языка.

Простое програмирование на относительно понятных текстах это просто надстройка над реальным процесором исполняющим. Указатель на память это вариант режима работы почти всех инструкций процесору. Аргумент инструкции может быть или регистровым (прямая адресация номером регистра - но их очень мало) или (регистровым) указателем на адрес в памяти. Это уменьшает количество нужных инструкций (нету надобности сначала грузить из памяти в регистр) и потому ускоряет исполнение и освобождает регистровый файл от редких нужных только одноразово на чтение чисел.

Потому когда писали си над реальными процесорами - указатели там были сразу натуральными.

Для всех начинающих изучать С. Указатели в приведённой книге рассматриваются только во второй половине. К этому моменту вы должны знать практический весь синтаксис. Это важно. Не надо изучать язык с конца.

Сначала можно прочитать пакет документации на свой процесор - там есть тома с инструкциями. Потом уже учить разные вспомогательные костыли если нету возможности делать програмы на инструкциях купленому процесору. И также если на процесор ставить какую операционую систему - также полезно прочитать документацию на нее и как использовать ее ресурсы для своих приложений-програм.

for(i=0;  sum_a< 250 , i<35  ; i++) // блок сравнения не работает

Если нужно много условий выхода - из цикла можно выходить бряком по внутреним условиям. Типа
if(sum_a>=35) break;

Может быть проще вместо мучаний исходной строки цикла. Где возникает основание для бряка - там можно и проверять и выходить. Вместо откладываний выхода до проверки общих условий цикла (и запоминаний про что там с какими условиями цикл был при чтении такой програмы).
« Последнее редактирование: 04 Ноя 2025 [23:59:52] от Ph_user »

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат

Когда уровень програмы всего порядка мейн - там можно просто глобальные переменые и указатели в начале описать. Их будет везде видно.
Я так и делаю, но все умные книги пишут, что так поступать не надо.
Я и сам это вижу.
В перспективе, хочу создать свою библиотеку, с каталогом звёзд в виде структур  ( название, альфа, дельта) и обращаться к каталогу напрямую из программы.
Пока же использую для выбора switch с заменой глобальных параметров. Всё работает, но, не по феншую.

Ешё для прерывания цикла,  мне удобен оператор goto  с меткой, но тоже не феншую.
« Последнее редактирование: 07 Ноя 2025 [13:15:59] от Карат »
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Vladimir3621

  • *****
  • Сообщений: 27 077
  • Благодарностей: 1166
    • Сообщения от Vladimir3621
Ешё для прерывания цикла,  мне удобен оператор goto  с меткой
Вы правильно написали, что именно вам удобен. Это бывает, если не разобрались с разными вариантами прерывания циклов, либо переусложнили логику блока - куча вложенных циклов, например. А если еще с массой ветвлений... Тогда вообще ужас :)
Это вы одиноки во вселенной. А нас - рать.

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат
Как правильно решить задачу?
Предположим, что есть программа, которая вычисляет массив данных, и записывает их в текстовый файл. Этот массив надо предварить комментарием: Дата, время, объект, что-то ещё.
Затем, другая программа, должна считать, но не весь файл. Дату и время, скопировать в свои переменные, а массив скопировать в свой собственный массив, для обработки.
В общем данные надо разделить для считывания, на текст и цифры.

Я не смог внести символ EOF в конец комментария. 
^Z  , не считывается как EOF,  а команда CTR+Z, не работает в тексте. Пришлось использовать символ $, но кажется, это не верно.

Допустим, есть вот такой файл, где 4-е строки - комментарии , затем строка с датой, и далее массив.
 
(кликните для показа/скрытия)

надо считать из файла,  всё отдельно. У меня вышло так:
FILE*fin;

    float mas[4];
    int date, month, year, tt, i, ch;
    int com[300];

    fin= fopen("comment_massiv.txt","r");
    if(!fin)
    {   printf("нет файла");
        return 1;
    }

    i=0;
    while( (ch=fgetc(fin))!='$'&& i<300)
    {
        com[i]=ch;
        i++;
    }
    com[i]='$';


    fscanf(fin,"%d %d %d %d",&date, &month, &year, &tt);

    for( i=0; i<4; i++)
    {
        fscanf( fin, "%f", &mas[i]);
    }

    fclose(fin);

//   Записано. Теперь выведем все на экран для контроля.
        i=0;
    while( (ch=com[i]) !='$' && i<300)
    {
        putchar(ch);
        i++;
    }


    printf("\n дата: %d %d %d время %d",date, month, year, tt);

    puts("\n");
    for (i=0; i<4; i++)
    {
        printf("  %f", mas[i]);
    }
    puts("\n");

    return 0;

}

Как сделать по науке, без $  и ещё лучше ?



« Последнее редактирование: 08 Ноя 2025 [15:27:46] от Карат »
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Павел ВасильевАвтор темы

  • *****
  • Сообщений: 1 084
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Как сделать по науке, без $  и ещё лучше ?
Так можно, но будешь долго считывать из файла, если он большой. Надо сразу грузить всё в память и там обрабатывать строки. Для этого есть  TStringList — класс в  C++ Builder для обслуживания строчных списков. Происходит от класса TStrings, но добавляет новые свойства и методы для операций, которые не возможны в классе-родителе.
Особенности:
Не связан с каким-либо компонентом, не является свойством любого из них.
Позволяет сохранять список строк в текстовый файл и загружать список
из текстового файла. То есть в нём встроен метод LoadFromFile и SaveToFile.
Даёт возможность работать со списками типа «имя-значение» и разделителями в текстовых файлах csv, dat
« Последнее редактирование: 11 Ноя 2025 [11:49:46] от Павел Васильев »
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат
Так можно, но будешь долго считывать из файла, если он большой.
Нет, мой массив не особо большой, не более пары сотен значений double.

Для этого есть  TStringList — класс в  C++ Builder
С++  не мой вариант, я только в си, он проще.
Со строками я пробовал, но все сводилось к тому, что надо знать, сколько строк выводить? А это заранее не известно.
Однако, если мой вариант не доставляет "моральную боль" опытному программисту, то пусть будет так.
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Ph_user

  • *****
  • Сообщений: 2 943
  • Благодарностей: 79
    • Сообщения от Ph_user
Если это все на виндусе - там есть вин апи и GetPrivateProfileString https://learn.microsoft.com/ru-ru/windows/win32/api/winbase/nf-winbase-getprivateprofilestring для чтения из ини файлов. Они структурированы как-то и можно держать строки коментариев в одном блоке и разные части таблицы в других блоках. Он еще читабельнее будет лучше набора чисел.

Старые виндусы времен 16битных были ближе к населению и там были удобные простые апи на си. Ну или поискать какую более новую библиотеку для чтения-записи как-то структурированых файлов похоже. Вместо очередной попытки устроить чтение-запись таких смешаных файлов. Или пробовать хранить разные куски информации в разных файлах - файловая система это тоже структура. Будет просто набор файлов в каталоге.

Оффлайн Vladimir3621

  • *****
  • Сообщений: 27 077
  • Благодарностей: 1166
    • Сообщения от Vladimir3621
Народ, вы что, программировать без API и библиотек классов и компонентов разучились? Неужели только меня одного смущает не то, что это сделано на чистом С, а то, что там куча циклов? При том, что все можно сделать в одном. И что вместо использования, например, формата csv, изобретается странный велосипед?
Это вы одиноки во вселенной. А нас - рать.

Оффлайн LeftUser

  • *****
  • Сообщений: 34 945
  • Благодарностей: 1103
  • Кирилл ㋛
    • Сообщения от LeftUser
    • Часы
Тоже про CSV хотел сказать  :)

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат
вместо использования, например, формата csv, изобретается странный велосипед?
Ясно, значить "моральная боль" имеет место быть. :)

Но, ни у  S.Prata,  ни у других авторов , нет упоминания  о  csv , или  api.
Видимо, это где-то далеко впереди. Но, буду знать, что такие есть.
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Ph_user

  • *****
  • Сообщений: 2 943
  • Благодарностей: 79
    • Сообщения от Ph_user
программировать без API и библиотек классов и компонентов разучились?

В останках времени в 2025 и при наличии уже помощи роботов - может надо просто копилота завести и дать команду помочь с чтением-записью такого в файлик. Иначе если каждый следущий новый програмист будет писать заново на сях такое дело - ну медлено уже прогрес пойдет.

Ну и если нужна абсолютно голо сяшная переносимость между кучей платформ - там тоже винапи харам. А если надо просто себе любимому на обычной все еще бытовой виндусе - так там и так есть это вин апи и нету надобности изобретать заново со времен 16бит виндуса (3.х ?).

Подключить нужный хедер winbase.h или даже просто великий и ужасный windows.h в той же обычной вижуал студии под виндус и спокойно дергать две апишные функции на чтение и запись своих переменных в удобочитаемый текстовый файлик. Ну имя файла там равно имени модуля - можно еще добавить функции копирования с переименованием. Это уже и на сях вмеру просто.

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

Виндус специально делают для покупателей счетно-решающих машин чтобы им было удобно - виндус и загружает исполняемый файл в память и передает ему управление и еще и предлагает для приложений покупателя ощутимый набор услуг апи чтобы было быстрее и удобнее и проще. Их уже сделали проф програмисты и отладили и документацию написали.
« Последнее редактирование: 11 Ноя 2025 [22:10:49] от Ph_user »

Оффлайн Vladimir3621

  • *****
  • Сообщений: 27 077
  • Благодарностей: 1166
    • Сообщения от Vladimir3621
В останках времени в 2025 и при наличии уже помощи роботов - может надо просто копилота завести и дать команду помочь с чтением-записью такого в файлик. Иначе если каждый следущий новый програмист будет писать заново на сях такое дело - ну медлено уже прогрес пойдет.
Ога, ога, только вчера на одной конференции по ИИ с этого хомячизма ржали.

вместо использования, например, формата csv, изобретается странный велосипед?
Ясно, значить "моральная боль" имеет место быть. :)
Я не знаю, что вас там имеет, чем вы там страдаете, и что у вас болит, я не ваш психолог или психиатр. Хотите страдать фигней - страдайте ради бога, надеюсь вы обычный мазохист, а не клиент означенных специалистов. Но ламером вы были, ламером и помрете. В общем, страдайте, а я пойду чаю себе налью :good:
« Последнее редактирование: 11 Ноя 2025 [21:41:17] от Vladimir3621 »
Это вы одиноки во вселенной. А нас - рать.

Оффлайн Павел ВасильевАвтор темы

  • *****
  • Сообщений: 1 084
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
С++  не мой вариант, я только в си, он проще.
Коллега, это показывает достаточно узкий круг задач, который вы пытаетесь решить старыми средствами без объектно-ориентированного программирования. Используйте готовые проверенные решения опенсорс - классы, объекты, визуальные компоненты и т.п. И код будет короче и читабельней, и программа станет быстрее работать без глюков.

Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн Карат

  • *****
  • Сообщений: 934
  • Благодарностей: 72
  • Как много есть вещей, которые мне не нужны!
    • Сообщения от Карат
Коллега, это показывает достаточно узкий круг задач, который вы пытаетесь решить старыми средствами без объектно-ориентированного программирования. Используйте готовые проверенные решения опенсорс - классы, объекты, визуальные компоненты и т.п.
Павел, спасибо, за добрые слова.
У меня очень узкий круг задач, несколько астрономических программ для себя ( эфемериды).  Но, если понравится, может быть продолжу. Остановил выбор на С, для моих задач даже его много.
Кодинг для меня просто хобби, дополнение к астрономии.
SW Dob 300мм,   Celestron  200мм Dob.

Оффлайн Бобр-99

  • *****
  • Сообщений: 4 655
  • Благодарностей: 90
    • Сообщения от Бобр-99
С++ только для тех кто вынужден заниматься профессионально. ООП по нему понять нельзя ибо автор не понимал.
2x54, 16x50
Доб 305 мм F/5
24/67, 14/72, 10/72, 6/100

Оффлайн Ph_user

  • *****
  • Сообщений: 2 943
  • Благодарностей: 79
    • Сообщения от Ph_user
это показывает достаточно узкий круг задач, который вы пытаетесь решить старыми средствами без объектно-ориентированного программирования. Используйте готовые проверенные решения опенсорс - классы, объекты, визуальные компоненты и т.п

Основное количество бывшей высокой цивилизации было посчитано и решено без плюсатых сей. Си апи тоже дает услуги для работы с файликами. Собствено основное апи виндуса все еще си. А плюсатость там уже на уровне директ икса и более сложных апи. Да и на юниксах си вполне модный. Даже часть програм для улучшения совместимости переводят с плюсатых апи на сишные - значит в этом есть смысл и в середине 202х.

и программа станет быстрее работать без глюков.

При отсутствии весьма приличных пониманий в устройство плюсатых сей вполне возможные глюки и косяки искать там намного сложнее. И еще и если в чужой части есть косяк - искать автора и доказывать потребность в лечении косяка. Для случая косяков в мфц - идти на форумы поддержки майкрософта и ждать что скажет поддержка. Ну и зависимость от овер огромной уже кучи версий плюсатых компонентов с разными комбинациями вылеченых и новых добавленых косяков. Сколько этих версий уже понаделано можно посмотреть при установке вмеру новых вижуалстудий.

А поддержка опенсорсных плюсатых кусков все хуже и хуже по физическому концу безплатных высококвалифицированых голов в опенсорсе к концу первой четверти 20хх. Старые головы выходят из бизнеса и годности к работе и новых уже нету.
« Последнее редактирование: 15 Ноя 2025 [12:25:05] от Ph_user »