Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Найти индексы начала и конца последовательности элементов массива с одинаковыми значениями https://www.cyberforum.ru/ c-beginners/ thread1494099.html
Помогите! В заданном массиве из N элементов найти индексы начального и конечного элементов, которые являются началом и концом последовательности элементов массива с одинаковыми значениями. (Например, для А = (2,3,2,3,3,3,3,2) это будет 4 и 7). Считать, что в последовательности более двух элементов.
Разобрать и прокомментировать рекурсивную функцию C (СИ)
Здравствуйте, начал изучать Си сравнительно недавно, помогите разобрать код "по полочкам". int f(int start, int end){ int sum = start; if (start <= end) return sum; start--; sum += f(start, end); return sum; }
C (СИ) Сформировать матрицу по образцу Треугольные матрицы (закрашены ненулевые элементы) https://www.cyberforum.ru/ c-beginners/ thread1494034.html C (СИ) Составить нерекурсивную функцию вычисления N-го числа Фибоначчи https://www.cyberforum.ru/ c-beginners/ thread1493987.html
Вывести на экран последовательность An. Количество элементов, которое необходимо вывести, запросить у пользователя. A1=1, A2=1, An=An-1 + An-2 помогите пожалуйста!!!
C (СИ) Как работают макросы?
В своей книге Керниган и Ритчи приводят в пример такой макрос: #define max(A, B) ((A) > (B) ? (A) : (B)) Далее они пишут пример, в котором данный макрос работает некорректно, также они говорят, что вычисления в данном макросе происходят 2 раза => большее значение будет инкрементировано 2 раза: max(i++, j++) Объясните мне, что тут к чему? Почему макрос вычисляется два раза? И почему нужно...
C (СИ) Ошибка при компиляции, как перевести? В спойлере скрин - как перевести эту ошибку? Компилил с IDE CppDroid, она пропускалась, Dev-CPP в упор не пропускает дальше. Что кстати сделать можно чтоб исправить? Если надо, кину код https://www.cyberforum.ru/ c-beginners/ thread1493752.html
C (СИ) Вычислить сумму элементов массива, расположенных между первым и последним нулевыми элементами https://www.cyberforum.ru/ c-beginners/ thread1493747.html
Помогите составить программу, формирующую одномерный массив, состоящий из N целых элементов. Вычислить сумму элементов массива, расположенных между первым и последним нулевыми элементами. Вычислить произведение элементов массива с четными номерами. Упорядочить отрицательные элементы массива по убыванию. Порядок следования остальных элементов не изменять. Я совершенно не могу понять логику.
C (СИ) Используя очередь переписать содержимое текстового файла
Используя очередь, решить следующую задачу. Содержимое текстового файла f, разделенное на строки, переписать в текстовый файл g, перенося при этом в конец каждой строки все входящие в нее цифры (с сохранением исходного порядка как среди цифр, так и среди остальных символов очереди). Пожалуйста, помогите с кодом или примерным алгоритмом последовательности действий, буду очень благодарная любой...
C (СИ) Составить строку из цифр, соответствующих данным буквам https://www.cyberforum.ru/ c-beginners/ thread1493577.html
Пусть цифрам от 1 до 9 соответствуют буквы от А (а) до I(i). С клавиатуры вводится строка. Составьте новую строку из цифр, соответствующих только данным буквам (прописным и строчным), отсортированным по возрастанию. Допустимые символы - прописные и строчные латинские буквы. Пример: Исходная строка: SHiFROVkaOtSHPIonA Результат: 1168899(выделены буквы: HiFaHIA) Пожалуйста, помогите с кодом...
C (СИ) Как правильно включить -std=c99 в Code Blocks для одного файла? https://www.cyberforum.ru/ c-beginners/ thread1493499.html
В Code::Blocks 13.12 один файл, не мной написанный, требует с99. Включаю в Project -Build Options - всё компилируется. Но я хочу только для него одного включить -std=c99, делаю это в окне Managament в контекстном меню этого файла, и в окне логов при попытке скомпилировать такое сообщение:"Execution of '-std=c99' in 'D:\c\cbp' failed." Если в контекстном меню выбираю "Build file", то все файлы...
C (СИ) Принтер из звездочек
Так как тут больше кода для С, то попрошу вас помочь с некоторым в моём коде: Проблема в том, что когда я хочу в переменную int записать пробел (символ типо, пустота) то он либо: а) пропускает строку scanf б) scanf не работает. Пробовал ставить getch, getchar, kbhit - не работало ничего. И да, я новичок в этом деле, поэтому видимо такие костыли и получились) #include <conio.h> #include...
C (СИ) Помогите найти ошибку в программе расчета факториала Начал Си учить в студии13 печатаю по статье и решил факториал писать, ну где 1*2*3*4 и дальше числа. Ясно чё фигня, но и тут запара. Ввожу "-1" и оно вроде пишет чтоб ввод повторил, пишу 5 и пишет 120, но потом жму энтер, а оно мне -1. Какого? Спасибо, ребятки за возможные ответы. Помогите жизу разрулить. #include <stdio.h> #include <windows.h> #include <locale.h> int factorial(short n); https://www.cyberforum.ru/ c-beginners/ thread1493434.html
27 / 27 / 9
Регистрация: 21.04.2015
Сообщений: 697
09.07.2015, 04:48  [ТС] 0

Выделение динамической памяти для двумерного массива с посдедующим изменением его размера - C (СИ) - Ответ 7853083

09.07.2015, 04:48. Показов 1449. Ответов 8
Метки (Все метки)

Ответ

Под указателями 2го уравня я понимаю указатели 2го уравня (указатель на указатель, число вложений может быть любым), а ссылка - это ссылка, к тому же не "поумнее", а "потупее" и в добавок ссылки работают иначе, ссылки удобно использовать разве что для передачи адресов между функциями

Добавлено через 7 минут
Ничего лучше вот этого Не работает функция realloc() на форуме пока не нашёл, по крайней мере на данный момент, но меня напрягает копипаста (memmove) памяти внутри не зависимо от того, было перемещение в новое место при выделении или нет

Добавлено через 1 час 24 минуты
Уточню ещё, по заданию мне запрещено явным образом использовать глобальные перменные, кто знает как можо передать значение наружу без их использования - помогите пожалуйста, я не знаю как ещё можно сделать.

С использованием глобальных переменных можно так:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <cstdlib>
#include <iostream>
#include <time.h>
using namespace std;
 
int GenRndArr(__int16 * Array, int & SizeWidth, int & SizeHeight);
 
__int16 * Arr = NULL, * ArrX = NULL;
 
void main() {
    __int16 Min = numeric_limits<__int16>::max(), Max = numeric_limits<__int16>::min();
    int SizeW = 0, SizeH = 0, SizeX = 0;
 
    if (!GenRndArr(Arr, SizeW, SizeH)) {
 
    puts(""); free(Arr); Arr = NULL; system("pause");
    }
}
 
int GenRndArr(__int16 * Arr, int & SizeW, int & SizeH)
{
    __int16 i, j, * ArrNew = NULL; srand((unsigned int)time(0)); 
 
    SizeW = 10 + rand() % 6; SizeH = 10 + rand() % 10;
 
    ArrNew = (__int16*)realloc(Arr, SizeW * SizeH * sizeof(*Arr));
    if (ArrNew == NULL)
    { free(Arr); Arr = NULL; puts("Error memory"); system("pause"); /*return 1;*/ }
    else { Arr = ArrNew; j = 0;
 
        while (j < SizeH) { i = 0;
            while (i < SizeW)   { Arr[j * SizeW + i] = 128 - rand() % 255; i++; } j++;
        } j = 0;
 
        printf("SizeW = %d ; SizeH = %d\n", SizeW, SizeH);
        while (j < SizeH) { i = 0;
            while (i < SizeW) { printf("%4d ", Arr[j * SizeW + i]); i++; }
            puts(""); j++;
        }
    }
 
    ::Arr = Arr;
    if (Arr) { return 0; } else { return 1; }
}


Добавлено через 3 часа 39 минут
При использовании глобальных переменных функция будет выглядеть так:
C++
1
int GenRndArr(int & SizeWidth, int & SizeHeight);
Т.е __int16 * & Arr в ней бесмыслено и не нужно.

Вроде разобрался...

Корче, как я и думал, но не мог всё это время сделать, поскольку запутался со всеми этими кучами указателей, сылок и прочего. Делается это так.

Нужно всего-навсего ввести ещё один дополнительный указатель, который инициализировать в параметрах через ссылку, в конечном итоге выделение динамической памяти внутри функции БЕЗ использования return, циклов и многоуравневых указателей выглядет как:

Коменты:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int /*Имя функции*/(/*Тип данных массива*/* & /*Имя массива подробно*/, /*Тип данных для адресации массива*/ & /*Длинна строки подробно*/, /*Тип данных для адресации массива*/ & /*Чисто строк подробно*/);
 
void main() {
    /*Тип данных для адресации массива*/ /*Длинна строки*/ = 0, /*Чисто строк*/ = 0; /*Тип данных массива*/ * /*Имя массива*/ = NULL;
    /*Имя функции*/(/*Имя массива*/, /*Длинна строки*/, /*Чисто строк*/);
}
 
int /*Имя функции*/(/*Тип данных массива*/* & /*Имя массива*/, /*Тип данных для адресации массива*/ & /*Длинна строки*/, /*Тип данных для адресации массива*/ & /*Чисто строк*/)
{
    /*Тип данных для адресации массива*/ /*Счётчик столбцов*/, /*Счётчик строк*/;
    /*Тип данных массива*/ */*Имя временного указателя массива*/ = NULL, */*Имя указателя перемещённого в памяти массива при выделении памяти*/ = NULL;
 
    /*Ввод рвзмеров массива*/; //srand((unsigned int)time(0)); SizeW = 10 + rand() % 6; SizeH = 10 + rand() % 10;
 
    /*Имя указателя перемещённого в памяти массива при выделении памяти*/ = (/*Тип данных массива*/*)realloc(/*Имя временного указателя массива*/, /*Длинна строки*/ * /*Чисто строк*/ * sizeof(*/*Имя временного указателя массива*/));
    if (/*Имя указателя перемещённого в памяти массива при выделении памяти*/ == NULL)
    { free(/*Имя временного указателя массива*/); /*Имя временного указателя массива*/ = NULL; puts("Error memory"); system("pause"); /*return 1;*/ }
    else { /*Счётчик: чисто строк*/ = 0; /*Имя массива*/ = /*Имя указателя перемещённого в памяти массива при выделении памяти*/;
 
        while (/*Счётчик: чисто строк*/ < /*Чисто строк*/) { /*Счётчик: чисто столбцов*/ = 0;
            while (/*Счётчик: чисто столбцов*/ < /*Чисто столбцов*/) { Arr[/*Счётчик: чисто строк*/ * /*Чисто столбцов*/ + /*Счётчик: чисто столбцов*/] = 128 - rand() % 255; /*Счётчик: чисто столбцов*/++; } /*Счётчик: чисто строк*/++;
        } /*Счётчик: чисто строк*/ = 0;
 
//code
 
    }
 
    if (/*Имя массива*/) { return 0; } else { return 1; }
}

Код:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int GenRndArr(__int16* & Array, int & SizeWidth, int & SizeHeight);
 
void main() {
    int SizeW = 0, SizeH = 0; __int16 * Arr = NULL;
    GenRndArr(Arr, SizeW, SizeH);
}
 
int GenRndArr(__int16 * & Arr, int & SizeW, int & SizeH)
{
    __int16 i, j, *ArrTmp = NULL, *ArrNew = NULL; srand((unsigned int)time(0));
 
    SizeW = 10 + rand() % 6; SizeH = 10 + rand() % 10;
 
    ArrNew = (__int16*)realloc(ArrTmp, SizeW * SizeH * sizeof(*ArrTmp));
    if (ArrNew == NULL)
    { free(ArrTmp); ArrTmp = NULL; puts("Error memory"); system("pause"); /*exit(1);*/ }
    else { j = 0; Arr = ArrNew;
 
        while (j < SizeH) { i = 0;
            while (i < SizeW) { Arr[j * SizeW + i] = 128 - rand() % 255; i++; } j++;
        } j = 0;
 
//code
 
    }
 
    if (Arr) { return 0; } else { return 1; }
}


Вернуться к обсуждению:
Выделение динамической памяти для двумерного массива с посдедующим изменением его размера C (СИ)
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2015, 04:48
Готовые ответы и решения:

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

Динамическое выделение памяти для двумерного массива
Здравствуйте! В следующей программе я пытаюсь выделить динамически память для двумерного...

Реализовать фунцию для выделения блока свободной динамической памяти (кучи) заданного размера
4) Управления кучей. Реализовать фунцию для выделения блока свободной динамической памяти (кучи)...

Выделение динамической памяти
Чтобы выделить динамическую память под символьный массив надо так: int n; char *str; ...

8
09.07.2015, 04:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2015, 04:48
Помогаю со студенческими работами здесь

Выделение динамической памяти
В одномерном массиве,*состоящем из п вещественных элементов, вычислить: - минимальный элемент...

Выделение динамической памяти для двумерного массива.
#include &lt;iostream&gt; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); int N, M; std::cout &lt;&lt;...

Выделение динамической памяти для массива
можно ли так выделять? int array = new int;оно работает,но правильно ли это?

Выделение динамической памяти для массива точек
Доброго времени суток. Вот у нас есть структура точка struct point { ...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru