Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
#1

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

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

Помогите написать функцию, но нужно использовать только указатели

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

2. Сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 00:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив с указателями. Максимальный по модулю элемент массива. (C++):

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

Максимальный по модулю элемент массива - C++
Помогите, пожалуйста! Нужно найти: 1. номер максимального по модулю элемента в массиве 2. сумму элементов массива, расположенных...

Вычислить максимальный по модулю элемент массива - C++
:(помогите написать программу: в одномерном массиве, состоящем из n вещественных элементов, вычислить:1) максимальный по модулю элемент...

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

Найти максимальный по модулю элемент массива - C++
Хотелось бы выразить большую благодарность Croessmah'у за оказанную помощь. Позвольте ещё раз обратиться за помощью: В одномерном...

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

16
Serejke_qq
150 / 108 / 9
Регистрация: 06.07.2011
Сообщений: 224
Завершенные тесты: 2
29.03.2012, 09:40 #2
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
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,245
Записей в блоге: 1
29.03.2012, 12:04 #3
Цитата Сообщение от Serejke_qq Посмотреть сообщение
C++
1
*(arr+i)
Я конечно читал название темы, но всё равно считаю, что именно для таких вещей придумали оператор []
0
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
29.03.2012, 14:35  [ТС] #4
Спасибо всем огромное кто откликнулся.
А со второй частью задания может кто-то поможет?

2. Сумму элементов массива, расположенных между первым и вторым положительными элементами.
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
30.03.2012, 15:09  [ТС] #5
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 / 1
Регистрация: 23.06.2011
Сообщений: 238
30.03.2012, 23:57 #6
Преобразование массива закончу завтра(самому интересно стало), а пока что лови вот:

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
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
01.04.2012, 11:48  [ТС] #7
Цитата Сообщение от Ieroglif Посмотреть сообщение
Преобразование массива закончу завтра(самому интересно стало), а пока что лови вот:
Большое спасибо!
Если не сложно посмотри с преобразованием массива, а то я запутался с этими указателями
0
Ieroglif
19 / 19 / 1
Регистрация: 23.06.2011
Сообщений: 238
01.04.2012, 22:53 #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
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
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
02.04.2012, 19:09  [ТС] #9
Цитата Сообщение от Ieroglif Посмотреть сообщение
Окончательный вариант. Подправил ранее допущенные ошибки, проверил - вроде как работает ]
Ещё раз огромное спасибо!

А как сделать? Что-то никак не могу привыкнуть к этим указателям
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных.
0
Ieroglif
19 / 19 / 1
Регистрация: 23.06.2011
Сообщений: 238
02.04.2012, 21:05 #10
Цитата Сообщение от 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
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
12.04.2012, 20:01  [ТС] #11
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 / 1
Регистрация: 23.06.2011
Сообщений: 238
12.04.2012, 23:24 #12
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
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
13.04.2012, 15:21  [ТС] #13
Огромнейшее спасибо тебе, ты меня очень выручил!!!

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

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 / 1
Регистрация: 23.06.2011
Сообщений: 238
14.04.2012, 13:59 #14
C++
1
 printf("%i\n", &vec[0]);
Описывается вывод лишь 1го элемента с индексом "0".
1
jvov
1 / 1 / 0
Регистрация: 28.09.2011
Сообщений: 113
14.04.2012, 22:31  [ТС] #15
Цитата Сообщение от 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
14.04.2012, 22:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2012, 22:31
Привет! Вот еще темы с ответами:

Вычислить максимальный по модулю элемент массива - C++
Заполнить случайными числами от -5 до 5. В одномерном массиве, состоящем из 10 целых элементов вычислить: а)максимальный по модулю...

Найти максимальный по модулю элемент массива - C++
в одномерном массиве ,состоящем из n вещественных элементов вычислить: 1) максимальный по модулю элемент массива

Вычислить максимальный по модулю элемент массива - C++
Помогите написать программу в Visual Studio 2008. В одномерном массиве, состоящем из n вещественных элементов, вычислить: а) ...

Вычислить максимальный по модулю элемент массива - C++
:cry: помогите написать программу: в одномерном массиве, состоящем из n вещественных элементов, вычислить:1) максимальный по модулю...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru