Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600

Работа с динамическими массивами

31.03.2017, 21:07. Показов 2853. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, коллеги!

В связи с производственной необходимостью столкнулся с проблемой кодирования на Сях под linux. Честно признаюсь - ни в том ни в другом ни разу не работал. Знал что есть, но сталкиваться не приходилось.

Итак, история вопроса (задачи):

есть некий прибор, который измеряет физическую величину, допустим V. Количество точек измерения ограничено максимумом (4096), но вполне конкретно в ходе каждого измерения => необходимо применять динамический массив, чтобы не таскать за собой кучу пустышек, если, например, количество значений =100. Тип измеряемых значений - Double.

ЗАДАЧА:
1) Преобразовать массив длинной 4096 в массив конкретной длинны N;
2) Вывести значения в файл на диске (в формате, например "%0.3f\n")

Подсобите, пожалуйста с кодом.
Примеры гуглил, в основном все про тип integer. Про Double информации недостаточно для понимания (мне).

ЗЫ: Свой говнокод проверяю в студии.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.03.2017, 21:07
Ответы с готовыми решениями:

Работа с динамическими массивами
Добрый день! Написал программу на си, которая рисует окружность в псевдографике: // Clocks.cpp : Defines the entry point for the...

Работа с динамическими массивами
Динамические массивы

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

28
Заблокирован
31.03.2017, 21:27
Цитата Сообщение от Winney Посмотреть сообщение
необходимо применять динамический массив, чтобы не таскать за собой кучу пустышек, если, например, количество значений =100.
А в каком виде выражается эта проблема?
Цитата Сообщение от Winney Посмотреть сообщение
Преобразовать массив длинной 4096 в массив конкретной длинны N;
В этом есть реальная необходимость?
Для работы с динамической памятью есть функции malloc, realloc, free.
Цитата Сообщение от Winney Посмотреть сообщение
Вывести значения в файл на диске (в формате, например "%0.3f\n")
Эти числа точно должны в виде строк быть выведены в файл? Их ведь потом не воротишь...
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 21:36  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
А в каком виде выражается эта проблема?
В виде моей неграмотности в Си.

Цитата Сообщение от nimazzzy Посмотреть сообщение
В этом есть реальная необходимость?
Да. Иначе бы вопрос не задавал.

Цитата Сообщение от nimazzzy Посмотреть сообщение
Для работы с динамической памятью есть функции malloc, realloc, free.
Знаю, читал. Примеры в нужном для меня объеме рассматриваются на типе Int. Применение "в лоб" для double не получается.

Цитата Сообщение от nimazzzy Посмотреть сообщение
Эти числа точно должны в виде строк быть выведены в файл? Их ведь потом не воротишь...
Да. В виде отформатированных строк. Реальные значения сохраняются в программе измерений прибора, а мне их нужно потом распарсить свой программой, которая принимает файлы с данными, разделенными табуляцией (да пофиг чем. вобщем своего формата).
0
Заблокирован
31.03.2017, 21:38
Цитата Сообщение от Winney Посмотреть сообщение
Иначе бы вопрос не задавал
От людей на форуме всего можно ожидать...
Цитата Сообщение от Winney Посмотреть сообщение
Применение "в лоб" для double не получается.
Почему? Там достаточно тип поменять и все ок. Можно увидеть, что именно не получается?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 21:39  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Можно увидеть, что именно не получается?
можно. но мне стыдно)))
фигня получается. вместо нормальных чисел вваливаются числа 10 в АХРЕНИТЕЛЬНОЙ степени. адреса что ли???
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 21:43  [ТС]
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main()
{
     
    double *ptrarray ; 
        int n;
    printf("Enter count: ");
    scanf("%d", &n);
    ptrarray = new double[n];
    //
    ptrarray =(double*)malloc(n * sizeof(double));
    //
    for (int i=0; i<n;i++){
        printf("Элемент[%d] = ", i);
        scanf("%f", (&ptrarray [i]));
    };
    
        for (int count = 0; count < 3; count++)
        {
                        printf("%0.3f\n",ptrarray[count]);
        };
                    system("pause");
    return 0;
}
Вот как то так

Такое у@@ще я наговнокодил)
Миниатюры
Работа с динамическими массивами  
0
Заблокирован
31.03.2017, 21:52
Цитата Сообщение от Winney Посмотреть сообщение
ptrarray = new double[n];
Это не С, это С++. Другой язык.
Цитата Сообщение от Winney Посмотреть сообщение
system("pause");
Это виндовая фигня.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
    double *ptrarray;
    int n, i;
    printf("Enter count: ");
    scanf("%d", &n);
 
    ptrarray = malloc(n * sizeof(double));
 
    for (i=0; i<n; ++i)
    {
        printf("Элемент[%d] = ", i);
        scanf("%lf", ptrarray + i);
    }
 
    for (i = 0; i < n; ++i)
        printf("%0.3lf\n", ptrarray[i]);
 
    getchar();
    return 0;
}
Добавлено через 1 минуту
Code
1
2
3
4
5
6
7
8
$ ./a.out 
Enter count: 3
Элемент[0] = 4.45645
Элемент[1] = 3
Элемент[2] = 5623.21341
4.456
3.000
5623.213
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 21:56  [ТС]
С языком согласен. копирую вставляю думаю. На измерительной машине некоторые вещи съедаются, правлю по месту.
Цитата Сообщение от nimazzzy Посмотреть сообщение
$ ./a.out
Enter count: 3
Элемент[0] = 4.45645
Элемент[1] = 3
Элемент[2] = 5623.21341
4.456
3.000
5623.213
Это то что вышло у вас?
0
Заблокирован
31.03.2017, 21:58
Да, это просто пример работы моего кода - правленного твоего.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 22:03  [ТС]
тупой наверное вопрос. как мне его проверить в студии???

ругается
2 IntelliSense: значение типа "void *" нельзя присвоить сущности типа "double *" c:\Users\Андрей\Documents\Visual Studio 2008\Projects\ConsoleApplication3\Consol eApplication3\ConsoleApplication3.c 41 14 ConsoleApplication3

и

Ошибка 2 error C2440: =: невозможно преобразовать "void *" в "double *" c:\users\андрей\documents\visual studio 2008\projects\consoleapplication3\consol eapplication3\consoleapplication3.cpp 41 1 ConsoleApplication3
0
Заблокирован
31.03.2017, 22:06
Цитата Сообщение от Winney Посмотреть сообщение
как мне его проверить в студии???
А не надо проверять в студии то, что ты под линукс делаешь.
Цитата Сообщение от Winney Посмотреть сообщение
2 IntelliSense: значение типа "void *" нельзя присвоить сущности типа "double *" c:\Users\Андрей\Documents\Visual Studio 2008\Projects\ConsoleApplication3\Consol eApplication3\ConsoleApplication3.c 41 14 ConsoleApplication3
А это говорит о том, что ты пытаешься скомпилировать С++ компилятором сишный код. Я бы, конечно, сказал, как поправить код, но мне совесть не позволяет поганить Си плюсами. Поэтому переименовывай свои файлы с кодом в *.c.
1
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 22:15  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Поэтому переименовывай свои файлы с кодом в *.c.
уже пробовал
Цитата Сообщение от nimazzzy Посмотреть сообщение
ConsoleApplication3.c
нихт реакции

Добавлено через 4 минуты
Цитата Сообщение от nimazzzy Посмотреть сообщение
А не надо проверять в студии то, что ты под линукс делаешь.
Хорошо. Предположим в линухе будет это работать.
Как мне значения массива загнать в файл на диске? интересует только строка вывода в файл. При имеющемся массиве с прибора у меня почему то в файл ничего не выводится. Видимо в силу испорченности студией и языками высокого уровня я туплю между указателем на массив и... еще чем то... пяткой чую. Как элементы дин массива втащить в файл?

Добавлено через 2 минуты
Цитата Сообщение от Winney Посмотреть сообщение
нихт реакции
пирдон, все работает.
stdafx.* не переименовал.

вопрос с выводом - туплю
0
Заблокирован
31.03.2017, 22:18
fopen, fprintf, fclose.

Добавлено через 1 минуту
Цитата Сообщение от Winney Посмотреть сообщение
stdafx.* не переименовал.
Он просто не нужен от слова "совсем".
1
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 22:21  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
fopen, fprintf, fclose.
да это нормуль все. все открываем, закрываем... но что то не пишем.

вопрос скорее в fprintf

в цикле писать через ("%lf", ptrarray + i)?

Добавлено через 1 минуту
Цитата Сообщение от nimazzzy Посмотреть сообщение
Он просто не нужен от слова "совсем".
не специалист в Си, поэтому действовал по инструкциям дружественных форумов)))
У меня есть такая поговорка (для себя, конечно): Я в Сях, как апельсина в свиньЯх)
0
Заблокирован
31.03.2017, 22:23
Цитата Сообщение от Winney Посмотреть сообщение
в цикле писать через ("%lf", ptrarray + i)?
Нет, так же, как printf, но с файлом.
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 22:34  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
Нет, так же, как printf, но с файлом.
тьфу, да. именно это и имел ввиду) скопипастил криво)

Добавлено через 4 минуты
Цитата Сообщение от nimazzzy Посмотреть сообщение
так же, как printf, но с файлом.
Пробую вот таким образом:
C
1
2
3
4
5
6
7
    FILE * fp;
    fp=fopen("c:\demo.txt", "w+");
    for (i = 0; i < n; ++i)
        {printf("%0.3lf\n", ptrarray[i]);
    fprintf(fp,"%lf\n",ptrarray[i]);};
    getchar();getchar();
    fclose(fp);
Добавлено через 2 минуты
МЛЯ!!!


ЧЕ опять не так???
0
Заблокирован
31.03.2017, 22:40
Цитата Сообщение от Winney Посмотреть сообщение
"c:\demo.txt"
А в твоем любимом высокоуровневом языке не надо экранировать обратные слэши?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 22:48  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
А в твоем любимом высокоуровневом языке не надо экранировать обратные слэши?
Есть такая фигня.
Но ругается на
Цитата Сообщение от Winney Посмотреть сообщение
FILE * fp;
Ошибка 2 error C2275: FILE: недопустимое использование этого типа в качестве выражения

Добавлено через 1 минуту
Цитата Сообщение от Winney Посмотреть сообщение
любимом высокоуровневом языке
В моём (VB) - нет)))
0
Заблокирован
31.03.2017, 22:51
Цитата Сообщение от Winney Посмотреть сообщение
FILE: недопустимое использование этого типа в качестве выражения
Ошибки на русском языке, о, господи, что может быть хуже...
На какую строку ругается-то?
0
 Аватар для Winney
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
31.03.2017, 22:56  [ТС]
Цитата Сообщение от nimazzzy Посмотреть сообщение
На какую строку ругается-то?
FILE *fp;

Добавлено через 58 секунд
Цитата Сообщение от nimazzzy Посмотреть сообщение
о, господи, что может быть хуже
Необработанные исключения)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2017, 22:56
Помогаю со студенческими работами здесь

работа с динамическими массивами
Всё что нужно, это рассчитать размерность массива через функцию, но в main я получаю, а если передаю массив в функцию то получаю 1, как...

Работа с динамическими массивами
Помогите пожалуйста с программой,это должна быть одна программа.. 1)Как написать процедуру для заполнение двумерного массива случайными...

Работа с динамическими массивами
Можно ли так делать? type TMass = array of Integer; function Funk1(a:TMass):TMass; var c:TMass; i:Integer; begin

Работа с динамическими массивами
Здравствуйте. Помогите, пожалуйста, написать программу 1. Использующую потоки cout и cin для ввода/вывода. Программа должна использовать...

Работа с динамическими массивами
Ошибка чтения данных возникает при работе с динамическими массивами: int *mask= new int ; long double **A= new long ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru