4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
1

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

02.04.2011, 14:33. Показов 1191. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализовать на Си.
Даны натуральное число n, действительные числа a1,...,an. Если последовательность a1,...,an упорядочена по убыванию(т.е. если a1<=a2<=...<=an), то оставить ее без изменения. Иначе получить последовательность an,...,a1. Для решения этой задачи полезен список, изображенный на рисунке.
Миниатюры
Использование указателей при работе с одномерными массивами  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2011, 14:33
Ответы с готовыми решениями:

Использование указателей при работе с одномерными и двумерными массивами.
Кто может решить. Даны натуральное число n,действительные числа X1,...,Xn.Вычислить: ...

Использование указателей при работе с одномерными и двумерными массивами
Даны натуральное число n, действительные числа a1, ..., an. Преобразовать последова-тельность a1,...

Использование указателей при работе с одномерными и двумерными массивами
Даны натуральное число n, действительные числа A1......An . Если в последовательности A1.....An...

Указатели при работе с одномерными и двумерными массивами
Помогите Даны натуральное число n, целые числа а1,...,аn . Выяснить, имеется ли среди чисел...

6
13 / 13 / 2
Регистрация: 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 использовать
0
4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
02.04.2011, 15:05  [ТС] 3
Спасибо, но здесь указано, что нужно написать с использованием указателей. Не могли бы Вы помочь с этим?
0
13 / 13 / 2
Регистрация: 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;
   }}}
}
1
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();
}
0
14 / 14 / 6
Регистрация: 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
0
4 / 4 / 1
Регистрация: 09.11.2010
Сообщений: 31
07.04.2011, 15:23  [ТС] 7
А та задача, которую я привела, неправильная?
0
07.04.2011, 15:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2011, 15:23
Помогаю со студенческими работами здесь

Реализовать класс для работы с одномерными массивами указателей строк
всем привет. помогите пожалуйста не могу написать прогу по заданию. реализовать класс для работы с...

Использование показателей при работе с массивами
n натуральное, a1,...,an действительные числа. Найти : a1a2n+a2a2n-1+...+anan+1

Использование показателей при работе с массивами
Даны a1,...,an действительные числа, n* натуральное число. Если в этой последовательности...

Использование функций при работе с двумерными массивами
Дана прямоугольная вещественная матрица . Обнулить все четные столбцы и нечетные строки. В...

Использование указателей при работе с массивами
Здесь двумерный массив, теперь надо написать его с использованием указателей. У меня не...

Операции с указателями. Использование указателей при работе с динамическими массивами
Дан динамический массив целых чисел {ai} (i=1, 2, ...,n) , целые c и d (c &lt; d). Написать программу...


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

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

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