Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113

Массив с указателями. Максимальный по модулю элемент массива.

29.03.2012, 00:16. Показов 3665. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать функцию, но нужно использовать только указатели

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1. Максимальный по модулю элемент массива;

2. Сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2012, 00:16
Ответы с готовыми решениями:

Массив: Вычислить максимальный по модулю элемент массива...
В одномерном массиве, состоящем из п вещественных элементов, вычислить: • максимальный по модулю элемент массива; • сумму элементов...

Массив: Вычислить максимальный по модулю элемент массива...
Оформить каждый пункт задачи выбранного варианта в виде функции. Все необходимые данные для функций передаются им в качестве параметров....

Массив: Получить массив делением всех элементов исходного массива на максимальный по модулю элемент...
получить новый массив делением всех элементов исходного массива на элемент массива, крупнейший по абсолютной величине. На печать вывести...

16
 Аватар для Serejke_qq
199 / 142 / 57
Регистрация: 06.07.2011
Сообщений: 300
29.03.2012, 09:40
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
double Max(double * arr, int n);
 
int main()
{
    double * arr;
    int n;
 
    std::cout << "n = ";
    std::cin >> n;
 
    arr = new double[n];
 
    std::cout << "массив : \n";
 
    for(int i=0; i<n; i++)
        cin >> arr[i];
 
    cout << "\nМаксимальный по модулю элемент = " << Max(arr,n);
 
    delete[] arr;
 
    return 0;
}
 
double Max(double * arr, int n)
{
    double max = arr[0];
    for(int i=1; i<n; i++)
        if(abs(*(arr+i))>abs(max)) max = *(arr+i);
 
    return max;
}
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
29.03.2012, 12:04
Цитата Сообщение от Serejke_qq Посмотреть сообщение
C++
1
*(arr+i)
Я конечно читал название темы, но всё равно считаю, что именно для таких вещей придумали оператор []
0
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
29.03.2012, 14:35  [ТС]
Спасибо всем огромное кто откликнулся.
А со второй частью задания может кто-то поможет?

2. Сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
30.03.2012, 15:09  [ТС]
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
double SpecSum (double *arr, int n)
{
 
 
for(int i=1; i<n; i++)
{   
if(*(arr+i)>0) 
int sum = *(arr+i)+(*(arr+i));
    if (*(arr+i+1)>0) 
        return sum;
     
         
}
      
}
 
 
 
 
double MassZero (double *arr, int n) 
 
for(int i=1; i<n; i++){
             if(*(arr+i)=0)
        *((arr+n)-1)=&(arr+i)
 
return arr[];   
}
Написал функции, но что-то мне кажется не правильно
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
30.03.2012, 23:57
Преобразование массива закончу завтра(самому интересно стало), а пока что лови вот:

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
#include "stdafx.h"
#include "stdio.h"
#include <iostream>
using namespace std;
 
 
int main()
{
    signed int i=0, j=1, k=0, b=0;
    int* y;
    int* t;
    signed int mass[10];
 
    for(i;i<10;i++){//ввод матрицы
        cout<<"Enter "<<j++<<" element of mass: ";
        cin>>mass[i];
        cout<<endl;}
    cout<<endl<<endl;
 
    for(i=0;i<10;i++){cout<<mass[i]<<" ";}//вывод матрицы
    
    i=0;
    y=&mass[i];
    
    cout<<endl<<"Na4alnoe sost: i:"<<i<<" mass["<<i<<"]: "<<*y<<endl;//отладка-интерфейс
 
    while(k<2){//подсчёт посредством ссылок-указателей
            if(*y<0){
            y=&mass[i];
            i++;y=&mass[i];}
        else{
            y=&mass[i];
            cout<<">0; mass["<<i<<"]: "<<*y<<endl; 
            if(k<1){j=i;}
            k++; 
            i++;
            y=&mass[i];}
        }
    i--;
    
    for(k=j+1;k<i;k++){//алгоритм: сумма элементов между 1м и 2м положительными элементами
        y=&mass[k];
        b+=(*y);}
    cout<<"Summa elemevtov megdy dvymia pologitelnimi elementami: "<<b<<endl;//вывод-результат алгоритма
 
    system("pause");
    return 0;
}
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
01.04.2012, 11:48  [ТС]
Цитата Сообщение от Ieroglif Посмотреть сообщение
Преобразование массива закончу завтра(самому интересно стало), а пока что лови вот:
Большое спасибо!
Если не сложно посмотри с преобразованием массива, а то я запутался с этими указателями
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
01.04.2012, 22:53
Окончательный вариант. Подправил ранее допущенные ошибки, проверил - вроде как работает

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include "stdafx.h"
#include "stdio.h"
#include <iostream>
using namespace std;
 
 
int main()
{
    signed int i=0, j=1, k=0, b=0, t, c=0;
    signed int first_pl=-1, second_pl=0; 
    
    int* y;
    
    signed int mass[4];
 
    for(i;i<4;i++){//ввод матрицы
        cout<<"Enter "<<j++<<" element of mass: ";
        cin>>mass[i];
        cout<<endl;}
    cout<<endl<<endl;
 
    cout<<"Massiv: ";
    for(i=0;i<4;i++){cout<<mass[i]<<" ";}//вывод матрицы
        
    i=0;
    y=&mass[i];
    
    while(k<2 && i<4){//подсчёт посредством ссылок-указателей
            if(*y<=0){
            y=&mass[i];
            i++;
            y=&mass[i];}
        if(*y>0){
            y=&mass[i];
            if(k<1){first_pl=i;}
            if(k>0){second_pl=i;}
            k++; 
            i++;
            y=&mass[i];}
        }
    
    if(first_pl==-1 || second_pl==0){cout<<endl<<"Something is wrong;"<<endl;}//если недостаточно положительны элементов
    else {
        for(k=first_pl+1;k<second_pl;k++){//алгоритм: сумма элементов между 1м и 2м положительными элементами
        y=&mass[k];
        b+=(*y);}
        cout<<endl<<"Summa elemevtov megdy dvymia pologitelnimi elementami: "<<b<<endl;}//вывод-результат алгоритма}
 
i=0;
while(i<3){
    y=&mass[i];
    if(*y==0){
        t=*y;
        j=i;
    while(i<3){
        y=&mass[i];
        *y=(*(y+1));
        i++;    }
    y=&mass[3]; 
    *y=t; 
    if(mass[j]==0 && c<4){i=j;c++;}
    else i++; }
    else i++;}
    
cout<<endl<<endl;
        for(i=0;i<4;i++){cout<<mass[i]<<" ";}//вывод матрицы
        cout<<endl;
 
    system("pause");
    return 0;
    }
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
02.04.2012, 19:09  [ТС]
Цитата Сообщение от Ieroglif Посмотреть сообщение
Окончательный вариант. Подправил ранее допущенные ошибки, проверил - вроде как работает ]
Ещё раз огромное спасибо!

А как сделать? Что-то никак не могу привыкнуть к этим указателям
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
02.04.2012, 21:05
Цитата Сообщение от jvov Посмотреть сообщение
А как сделать? Что-то никак не могу привыкнуть к этим указателям
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
Так я же это реализовал в том числе - массив преобразуется таким образом, чтобы нули были расположены в его конце.
Вот строчки, отвечающие за сортировку-преобразование(указатели в комплекте ):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i=0;
while(i<3){
    y=&mass[i];
    if(*y==0){
        t=*y;
        j=i;
    while(i<3){
        y=&mass[i];
        *y=(*(y+1));
        i++;    }
    y=&mass[3];
    *y=t;
    if(mass[j]==0 && c<4){i=j;c++;}
    else i++; }
    else i++;}
0
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
12.04.2012, 20:01  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i=0;
while(i<3){ пока не больше длинны массива
    y=&mass[i]; записываем в у ссылку на массив
    if(*y==0){ если равен 0
        t=*y;        0 кладем в t
        j=i;           элемент массива в j
    while(i<3){          [
        y=&mass[i];        не очень понял что это цикл делает?
        *y=(*(y+1));
        i++;    }             ]
    y=&mass[3];      ссылка на 3-ий элемент
    *y=t;                  0 записываем в 3 элемент 
    if(mass[j]==0 && c<4){i=j;c++;} если тот элемент, где был 0 равен 0 и с меньше длинны массива - становиться началом след. цикла и увиличивается с
    else i++; }   почему тут i увиличиваем?
    else i++;}   и тут?
А алгоритм получается такой, какой написал в коментах и в некоторых моментах не совсем понятно?
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
12.04.2012, 23:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i=0;//работу начинаем с 1го эл-та массива, у него индекс 0
while(i<3){ //проверяем все элементы за исключением последнего
    y=&mass[i]; // в у кидаем адрес эл-та
    if(*y==0){ //если равен 0
        t=*y;        //мы егозапоминаем
        j=i;         // и запоминаем его индекс
    while(i<3){          // теперь нам надо сдвинуть все эл-ты, следующие за нулевым на один шаг влево; опять же, работа ведётся до предпоследнего эл-та массива включительно
        y=&mass[i];        //запоминаем адрес текущего эл-та массива - он нулевой
        *y=(*(y+1));  // и закидываем на его место значение следущего за ним эл-та по адрес у+1;
        i++;    }           // мы увеличили индекс эл-та - перешли на следующий эл-т, т.к. нам надо сдвинуть и другие эл-ты
    y=&mass[3];      //когда мы сдвинули все эл-ты, мы записываем в у адрес последнего эл-та массива - последнюю позицию
    *y=t;                  //и ставим в эту позицию значение нулевого эл-та, мы его заранее забили в переменную t
    if(mass[j]==0 && c<4){i=j;c++;} //мы кинули нулевой эл-т назад, сдвинули последующие эл-ты влево, но не сключено, что новый эл-т, поставленный на место нулевого, также является нулём - мы не должны его упустить; также не исключено, что существует некоторое кол-во последовательно стоящих нулей - если это так, то цикл будет бесконечным, чтобы этого избежать исп-я переменная с - она указывает максимальное кол-во перестановок эл-в в массиве
    else i++; }   // если всё хорошо и поставленный элемент не является нулевым, то мы проверяем след. эл-т
    else i++;}   // в том случае, если эл-0т изначально не является нулевым, то мы проверяем след. эл-т
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
13.04.2012, 15:21  [ТС]
Огромнейшее спасибо тебе, ты меня очень выручил!!!

А теперь я хочу поместить полученный массив в вектор и распечатать его, но почему-то выдает не тот результат, что в массиве. Что я упустил или неправильно сделал?

C++
1
2
3
4
5
6
7
8
 
  vector<int> vec(sizeof mass);  
  
  memcpy(&vec[0], mass, sizeof mass); 
  
  printf("%i\n", &vec[0]); 
  
  system("pause");
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
14.04.2012, 13:59
C++
1
 printf("%i\n", &vec[0]);
Описывается вывод лишь 1го элемента с индексом "0".
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
14.04.2012, 22:31  [ТС]
Цитата Сообщение от Ieroglif Посмотреть сообщение
C++
1
 printf("%i\n", &vec[0]);
Описывается вывод лишь 1го элемента с индексом "0".
поменял, но почему то не то выводит... а когда просто печатаю массив, то все верно... подозреваю, что ошибка в заполнение вектра?

C++
1
2
3
4
5
6
7
vector<int> vec(sizeof mass, 3);  
  
  memcpy(&vec[0], mass, sizeof mass); 
 
  for (int i=0; i<4; i++){
  printf("%i\n", &vec[i]); 
  }



вот, что выводит -

Enter 1 element of mass: 2

Enter 2 element of mass: 3

Enter 3 element of mass: 0

Enter 4 element of mass: 5



Massiv: 2 3 0 5
Summa elemevtov megdy dvymia polog


2 3 5 0

Zadanije 3 rabota s vektorom
1069616
1069620
1069624
1069628
Press any key to continue . . .
0
 Аватар для Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
15.04.2012, 10:52
Цитата Сообщение от jvov Посмотреть сообщение
&vec[i]
Ну так адрес же выводите.

C++
1
*(vec+i)
Нет?
1
1 / 1 / 4
Регистрация: 28.09.2011
Сообщений: 113
15.04.2012, 11:39  [ТС]
Цитата Сообщение от Ieroglif Посмотреть сообщение
Ну так адрес же выводите.

C++
1
*(vec+i)
Нет?
Точно, спасибо, искал везде ошибку, а она перед носом была И не обратил внимания, что выводит, то адрес, а не значение.

вывел так -
C++
1
vec[i]
На такую запись почему, то ругался? -
C++
1
printf("%i", *(vec+i));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2012, 11:39
Помогаю со студенческими работами здесь

Дан двумерный массив. Заменить максимальный по модулю элемент на минимальный по модулю элемент
Дан двумерный массив. Заменить максимальный по модулю элемент на минимальный по модулю элемент.

Массив: В массиве, состоящем из n элементов, вычислить максимальный по модулю элемент массива...
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1.максимальный по модулю элемент массива; 2.сумму элементов...

Вычислить max2-min2 , где max-максимальный по модулю элемент массива, а min -минимальный по модулю
Дан массив размера 6 x 2 с элементами вещественного типа. Написать программу для вычисления max2-min2 , где max-максимальный по модулю...

Определить максимальный по модулю элемент элемент массива и позицию в которой он расположен
Помогите пожалуйста решить задачку по с++; Задан одномерный массив В , состоящий из n вещественных элементов. Определить максимальный...

Массив: Найти максимальный по модулю элемент, а строку, которая содержит этот элемент, переслать в вектор
Создать двумерный массив i=3,j=4 формула вычисления элементов a=(sqr(i)*i)+4*(sqr(j)-15 Найти максимальный по модулю элемент...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru