Форум программистов, компьютерный форум CyberForum.ru

Использование указателей при работе с одномерными массивами - C++

Восстановить пароль Регистрация
 
Flaina
 Аватар для Flaina
4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
02.04.2011, 14:33     Использование указателей при работе с одномерными массивами #1
Реализовать на Си.
Даны натуральное число n, действительные числа a1,...,an. Если последовательность a1,...,an упорядочена по убыванию(т.е. если a1<=a2<=...<=an), то оставить ее без изменения. Иначе получить последовательность an,...,a1. Для решения этой задачи полезен список, изображенный на рисунке.
Миниатюры
Использование указателей при работе с одномерными массивами  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2011, 14:33     Использование указателей при работе с одномерными массивами
Посмотрите здесь:

. Использование указателей при работе с одномерными и двумерными массивами. C++
C++ Работа с двумерными числовыми массивами. Использование указателей. Использование функций пользователя.
C++ Использование указателей при работе с одномерными и двумерными массивами.
Указатели при работе с одномерными и двумерными массивами C++
Использование функций для работы с одномерными и двухмерными массивами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DexMipt
13 / 13 / 1
Регистрация: 13.03.2011
Сообщений: 98
02.04.2011, 15:04     Использование указателей при работе с одномерными массивами #2
если я правильно понял нужно просто отсортировать массив.
можно пузырьком
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
#include <stdio.h>
#define SIZE 100
 
int main()
{
    int a[SIZE],i,n;
    int pass,hold;
 
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
 
    for(pass=1;pass<n;pass++){
        for(i=0;i<n-1;i++){
            if(a[i]<a[i+1]){
               hold=a[i];
               a[i]=a[i+1];
               a[i+1]=hold;
   }}}
 
   for(i=0;i<n;i++)
       printf("%d ", a[i]);
 
   return 0;
}
А можно и qsort использовать
Flaina
 Аватар для Flaina
4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
02.04.2011, 15:05  [ТС]     Использование указателей при работе с одномерными массивами #3
Спасибо, но здесь указано, что нужно написать с использованием указателей. Не могли бы Вы помочь с этим?
DexMipt
13 / 13 / 1
Регистрация: 13.03.2011
Сообщений: 98
02.04.2011, 15:10     Использование указателей при работе с одномерными массивами #4
Передаю в функцию указатель на начало массива
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
#include <stdio.h>
#define SIZE 100
void buble(int* a,int n);
int main()
{
    int a[SIZE],i,n;
 
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
 
    buble(a,n);
 
    for(i=0;i<n;i++)
       printf("%d ", a[i]);
 
   return 0;
}
void buble(int* a,int n)
{
    int pass,hold,i;
    for(pass=1;pass<n;pass++){
        for(i=0;i<n-1;i++){
            if(a[i]<a[i+1]){
               hold=a[i];
               a[i]=a[i+1];
               a[i+1]=hold;
   }}}
}
Flaina
 Аватар для Flaina
4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
06.04.2011, 21:25  [ТС]     Использование указателей при работе с одномерными массивами #5
Вот эта программа, она выполнена полностью с помощью указателей, как нужно было в задаче.Но она работает некоррректно, выдает неправильные результаты. Подскажите пожалуйста.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#define n 5
void main()
{ int a[n],i,j,*p,c;
 
for(i=1;i<n;i++)
scanf("%d", p++);
p=a;
for(i=1;i<n;i++)
{
if(*(p+1+i)>*(p+i))
for(j=1;j<(int)(n/2);j++)
{c=*(p+j); *(p+j)=*(p+n-1-j);*(p+n-1-j)=c;
}
break;
}
for(i=1;i<n;i++)
printf("%d", *(p+i));
getch();
}
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
06.04.2011, 21:46     Использование указателей при работе с одномерными массивами #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
#include "stdafx.h"
#include <cmath>
#include <iostream>
#define SIZE 100
using namespace std;
void buble(int* a,int n);
int main()
{
    int a[SIZE],i,n;
 
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&*(a+i));
 
    buble(a,n);
 
    for(i=0;i<n;i++)
       printf("%d ", *(a+i));
 
   return 0;
}
void buble(int* a,int n)
{
    int pass,hold,i;
    for(pass=1;pass<n;pass++){
        for(i=0;i<n-1;i++){
            if(*(a+i)>*(a+i+1)){
               hold=*(a+i);
               *(a+i)=*(a+i+1);
               *(a+i+1)=hold;
   }}}
}
Полностью через указатели XD
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2011, 15:23     Использование указателей при работе с одномерными массивами
Еще ссылки по теме:

Использование указателей при работе с одномерными и двумерными массивами C++
C++ реализовать класс для работы с одномерными массивами указателей строк
C++ Использование функций при работе с двумерными массивами

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

Или воспользуйтесь поиском по форуму:
Flaina
 Аватар для Flaina
4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
07.04.2011, 15:23  [ТС]     Использование указателей при работе с одномерными массивами #7
А та задача, которую я привела, неправильная?
Yandex
Объявления
07.04.2011, 15:23     Использование указателей при работе с одномерными массивами
Ответ Создать тему
Опции темы

Текущее время: 16:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru