С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
1

Операции с указателями

27.11.2014, 12:08. Показов 1303. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно вопрос : есть функция
C++
1
2
3
4
void vyvod(char* prov)
{
    printf("%s", prov); 
}
и есть функция
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
45
46
47
48
void arrprocessing(char* slovo1, char* slovo2, int len1, int len2)
{
    int i, j, k = 0,len3;
    if (len1 > len2)
    {
        char *prov = new char[len1 + 1];
        for (i = 0; i < len1; i++)
        {
            for (j = 0; j < len2; j++)
            {
                if (slovo1[i] == slovo2[j])
                {
                    for (int y = 0; y <= len1; y++)
                    {
                        if (slovo1[i] != prov[y])
                        {
                            prov[k] = slovo1[i];
                            k++;
                        }
                    }
                }
            }
        }
    }
 
    if (len2 > len1)
    {
        char *prov = new char[len2 + 1];
        for (i = 0; i < len2; i++)
        {
            for (j = 0; j < len1; j++)
            {
                if (slovo2[i] == slovo1[j])
                {
                    for (int y = 0; y <= len2; y++)
                    {
                        if (slovo2[i] != prov[y])
                        {
                            prov[k] = slovo2[i];
                            k++;
                        }
                    }
                }
            }
        }
    }
    printf("Ваши данные обработаны, выведете результат на экран\n");
}
мне нужно передать массив prov из функции обработки массива в функцию его вывода, как это сделать?

Добавлено через 5 минут
вот как они связаны в функции void main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
case 2:
                if (wasEntered) {
                    arrprocessing(slovo1, slovo2, len1, len2);
                    wasCalculate = 1;
                }
...
case 3:
                if (wasCalculate) {
                    vyvod(*prov);
                }
                else {
                    printf("Сначала нужно произвести рассчет!\n");
                    printf("Выберите пункт меню 2\n");
                }
...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.11.2014, 12:08
Ответы с готовыми решениями:

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

Операции с указателями
Задание.Создать указатель *ptr на целочисленную переменную и присвоить число 100. Скопировать...

Арифметические операции с указателями
Имеется следующий простой код: #include &lt;iostream&gt; using namespace std; int main() { int *...

Операции над указателями
int var = 123; int *p = &amp;var; (*p)++ и ++*p это одно и тоже. В первом случае приоритет задал...

8
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
27.11.2014, 12:41 2
C++
1
vyvod(prov);
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
27.11.2014, 12:43  [ТС] 3
Цитата Сообщение от mss307 Посмотреть сообщение
vyvod(prov);
я так пробовал тоже, он говорит, что не знает что такое prov
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
27.11.2014, 12:51 4
ecofreeon, пришли код, в котором ты это пробовал.

Добавлено через 22 секунды
весь main() пришли, короче.

Добавлено через 1 минуту
нет, main() не нужен.

Добавлено через 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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
void arrprocessing(char* slovo1, char* slovo2, int len1, int len2)
{
    int i, j, k = 0,len3;
    char *prov = nullptr;
    if (len1 > len2)
    {
        prov = new char[len1 + 1];
        for (i = 0; i < len1; i++)
        {
            for (j = 0; j < len2; j++)
            {
                if (slovo1[i] == slovo2[j])
                {
                    for (int y = 0; y <= len1; y++)
                    {
                        if (slovo1[i] != prov[y])
                        {
                            prov[k] = slovo1[i];
                            k++;
                        }
                    }
                }
            }
        }
    }
    else if (len2 > len1)
    {
        prov = new char[len2 + 1];
        for (i = 0; i < len2; i++)
        {
            for (j = 0; j < len1; j++)
            {
                if (slovo2[i] == slovo1[j])
                {
                    for (int y = 0; y <= len2; y++)
                    {
                        if (slovo2[i] != prov[y])
                        {
                            prov[k] = slovo2[i];
                            k++;
                        }
                    }
                }
            }
        }
    }
    if(nullptr != prov)
    {    
         vyvod(prov);
         printf("Ваши данные обработаны, выведете результат на экран\n");
    }
    delete[]    prov;
    
}
Добавлено через 1 минуту
у тебя переменная prov была локальной, объявлялась в if-ах, поэтому за их пределами не была видна.

Добавлено через 2 минуты
и лучше, конечно, в данном пользоваться if-else. да и еще в случае, если len2 == len1 что делать надо?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
27.11.2014, 12:57 5
Цитата Сообщение от ecofreeon Посмотреть сообщение
как это сделать?
Вариант 1:
Передаём в функцию указатель и в него записываем начало массива.
C++
1
2
3
char* arr_ptr = nullptr;
arrproc(..., arr_ptr);
vuvod(arr_ptr);
Вариант 2:
Функция будет возращать указатель char*
C++
1
2
3
4
5
6
7
8
9
10
char* arrproc(...)
{
char* prov = ....
// ...
return prov;
}
 
main()
char* arr_ptr = arrproc(...);
vuvod(arr_ptr);
Вариант 3:
Функция сама выводит
C++
1
2
3
4
5
void arrproc()
{
...
vuvod(prov);
}
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
27.11.2014, 15:30  [ТС] 6
Цитата Сообщение от mss307 Посмотреть сообщение
у тебя переменная prov была локальной, объявлялась в if-ах, поэтому за их пределами не была видна.
Добавлено через 2 минуты
и лучше, конечно, в данном пользоваться if-else. да и еще в случае, если len2 == len1 что делать надо?
при равности пофиксил, а вот там с объявлением тупанул) спасибо!
0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.11.2014, 15:33 7
Цитата Сообщение от ecofreeon Посмотреть сообщение
мне нужно передать массив prov из функции обработки массива в функцию его вывода, как это сделать?
Просто передавай указатель и всё. Но функции вывода массива у тебя нет, в лучшем случае ты выведешь сам указатель. Чтоб вывести массив, надо в цикле перебрать его элементы и вывести каждый элемент.
0
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 148
27.11.2014, 16:48  [ТС] 8
переделал, объявил так
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
45
46
47
48
49
void arrprocessing(char* slovo1, char* slovo2, int len1, int len2)
{
    int i, j, k = 0,len3;
    char *prov = new char[_MAX_INT_DIG];
    if (len1 > len2)
    {
        for (i = 0; i < len1; i++)
        {
            for (j = 0; j < len2; j++)
            {
                if (slovo1[i] == slovo2[j])
                {
                    for (int y = 0; y <= len1; y++)
                    {
                        if (slovo1[i] != prov[y])
                        {
                            prov[k] = slovo1[i];
                            k++;
                        }
                    }
                }
            }
        }
        prov[len1 + 1] = '\0';
    }
 
    if (len2 >= len1)
    {
        for (i = 0; i < len2; i++)
        {
            for (j = 0; j < len1; j++)
            {
                if (slovo2[i] == slovo1[j])
                {
                    for (int y = 0; y <= len2; y++)
                    {
                        if (slovo2[i] != prov[y])
                        {
                            prov[k] = slovo2[i];
                            k++;
                        }
                    }
                }
            }
        }
        prov[len2 + 1] = '\0';
    }
    printf("Ваши данные обработаны, выведете результат на экран\n");
}
не видит.
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Функция сама выводит
отдельно надо обязательно
0
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.11.2014, 17:00 9
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
void arrproc() { ... vuvod(prov); }
Нет. vuvod - оболочечная функция над стандартной, а она массивов не знает.

Добавлено через 1 минуту
В лучшем случае так можно вывести нуль-терминальную строку, или даже сам указатель.
0
27.11.2014, 17:00
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2014, 17:00
Помогаю со студенческими работами здесь

Арифметические операции с указателями второго порядка
Всем доброго времени суток. Есть собственно псевдокод: ...

Какие выражение, включающие операции над указателями, являются корректными?
Помогите пожалуйста ответить на вопрос, и объясните если не сложно. 1)ptr1=ptr+2; 2)ptr1=ptr2/10;...

Операции над указателями
Здравствуйте, есть ли возможность в ABC.NET увеличивать/уменьшать значение указателя в соответствии...

Работа с указателями и битовые операции (с C++ в C#)
Помогите перевести это в эффективный C# код :) int UnknownFunc0001(signed int a1) { return...

Возможны ли операции с указателями в обобщённых типах?
Интересует преобразование адреса(указателя) в тип Т, естественно тип Т-структура, вернее массив...

Операции над указателями и вывод получаемых значений
Использую компилятор NetBeans 8.1 под Linux Mint 17.3.Не могу откомпилировать программу, не совсем...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru