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

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

Войти
Регистрация
Восстановить пароль
 
Danil13
0 / 0 / 0
Регистрация: 20.09.2010
Сообщений: 8
#1

Первый отрицательный и минимальный эл массива - C++

30.11.2010, 05:23. Просмотров 361. Ответов 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
28
29
30
31
32
33
34
35
36
# include <stdio.h>
# include <conio.h>
 
void main()
{
    const int N1=100;
    int a[N1],i,p,imin,n,k;
    p=0;
    printf("\n Input n:");
    scanf("%d", &n);
    printf ("\n Input massiv:\n");
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    imin=1;
    for(i=1;i<=n;i++)
        if (a[i]<a[imin])
            imin=i;
        
    for(i=1;i<=n;i++)
        if(a[i]<0) 
        {p=i;
        break;}
 
    if (p==0)
        printf("\n otricat net");
    else
    {k=a[imin];
    a[imin]=a[p];
    a[p]=k;}
 
       printf("\n massiv:");
    for(i=1;i<=n;i++)
       printf("\t %d",a[i]);
 
    getch();
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2010, 05:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Первый отрицательный и минимальный эл массива (C++):

Поменять местами минимальный элемент и первый отрицательный элемент массива целых чисел - C++
Поменять местами минимальный элемент и первый отрицательный эле-мент массива целых чисел.Необходимо использовать указатели и динамическйи...

Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел - C++
Ребят нужен код, плизз )

Удалить из массива А (20) первый отрицательный элемент - C++
Удалить из массива А (20) первый отрицательный элемент.

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

Найти первый и последний отрицательный элемент массива - C++
Организовать одномерный массив с вещественными числами и найти первый и последний отрицательный элемент массива; Добавлено через 4...

Найти первый отрицательный элемент массива и его индекс - C++
В массиве из 15 чисел найти первый отрицательный элемент и его индекс в массиве.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
30.11.2010, 06:09 #2
Работа с массиваму означает работу с указателями, т.к. имя массива - целочисленный указатель на начало массива. К примеру a[1] эквивалентно *(a+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 <stdio.h>
# include <conio.h>
 
void main()
{
    const int N1=100;
    int a[N1],i,*p,*imin,n,k;
    p=NULL;
    imin=a;
    printf("\n Input n:");
    scanf("%d", &n);
    printf ("\n Input massiv:\n");
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    imin=1;
    for(i=1;i<=n;i++)
        if (a[i]<*imin)
            imin=a+i;
        
    for(i=1;i<=n;i++)
        if(a[i]<0) 
        {p=a+i;
        break;}
 
    if (p==NULL)
        printf("\n otricat net");
    else
    {k=*imin;
    *imin=*p;
    *p=k;}
 
       printf("\n massiv:");
    for(i=1;i<=n;i++)
       printf("\t %d",a[i]);
 
    getch();
    }
Я не стал исправлять, но уже пора смириться: в языках семейства Си счет начинают с нуля!
for(i=1;i<=n;i++) - отстой
for(i=0;i<n;i++) - круть

Добавлено через 2 минуты
И еще я бы посоветовал вам посмотреть правила табуляции в "Сях".
Danil13
0 / 0 / 0
Регистрация: 20.09.2010
Сообщений: 8
30.11.2010, 20:47  [ТС] #3
Спасибо большое за объяснение!

P.S. Не скажите где можно найти доходчиво объясняющие источники по указателям, а то у меня книги есть, но там все заумно написано и я не могу уловить главный смысл указателей

Заранее спасибо!

Добавлено через 17 минут
Массивы не давно прошли и там особых проблем не было, а тут даже не знаю туплю.

Добавлено через 3 минуты
А и здесь imin=1 не должно быть * ?
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
01.12.2010, 11:45 #4
А и здесь imin=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
void main()
{   # include <stdio.h>
    # include <conio.h>
    const int N1=100;
    int a[N1],i,*p,*imin,n,k;
    p=NULL;
    printf("\n Input n:");
    scanf("%d", &n);
    printf ("\n Input massiv:\n");
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    imin=a+1;
    for(i=1;i<=n;i++)
        if (a[i]<*imin)
            imin=a+i;
        
    for(i=1;i<=n;i++)
        if(a[i]<0) 
        {p=a+i;
        break;}
 
    if (p==NULL)
        printf("\n otricat net");
    else
    {k=*imin;
    *imin=*p;
    *p=k;}
 
       printf("\n massiv:");
    for(i=1;i<=n;i++)
       printf("\t %d",a[i]);
 
    getch();
}
Добавлено через 31 минуту
P.S. Не скажите где можно найти доходчиво объясняющие источники по указателям, а то у меня книги есть, но там все заумно написано и я не могу уловить главный смысл указателей
Что бы хорошо понять указатели ,как это ни плачевно , разумнее всего читать книги.

Главный смысл -
Каждый байт памяти пронумерован.
Каждому процессу выделяется его личная память, доступ к которой имеет только он, и никто другой, эту память он и использует для размещения переменных. Указатель - переменная(!), способная хранить адрес другой переменной, или ,грубо говоря, хранящая номер байта, содержащего начало другой переменной. Причем если этот байт находится вне памяти принадлежащей процессу, то попытка что-то сделать с ним приведет к ошибке сегментации (доступа).
Указатель задается вот так:
int *p;
на данном этапе значение p не определено, и операции *p и p[i] недопустимы!
Чтобы получить адрес переменной нужно использовать оператор & ;
int *p, a=4;
если мы сделаем так:
p=&a;
То мы сможем обращаться к a через операции *p и *p[0];
printf("%d",*p);
выдаст на экран 4.
так же если мы твердо уверены, что переменные b, c и d (|a|b|c|d|) стоят в памяти по порядку за переменной a, то обращение
p[1] или *(p+1) будет соответствовать переменной b
p[2] переменной с
*(p+3) переменной d
Нужно внимательно следить за указателями, так как их неправильное использование влечет за собой самые коварные и самые сложные для поиска ошибки.

Возможность работы с указателями является одним из главных преимуществ языков семейства Си.
Danil13
0 / 0 / 0
Регистрация: 20.09.2010
Сообщений: 8
01.12.2010, 16:13  [ТС] #5
Еще раз спасибо за объяснение!

Вроде в голове, что то проясняется
snakext
6 / 6 / 1
Регистрация: 08.06.2010
Сообщений: 35
01.12.2010, 16:32 #6
Если уж с указателями, то по-моему стоило создавать динамические массивы.
C++
1
2
cin>>n;
int* a=new int[n]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2010, 16:32
Привет! Вот еще темы с ответами:

Не получается удалить первый отрицательный элемент динамического массива - C++
Удалить первый отрицательный элемент динамического массива помогите пожалуйста #include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include...

Как удалить из одномерного массива первый отрицательный элемент - C++
Как удалить из одномерного массива первый отрицательный элемент for (i=0; i&lt;SIZE; i++) if (a==0) delete a вот эта...

Поменять местами максимальный отрицательный и первый положительный элементы массива - C++
Использовать обращение к элементам массива с помощью операции индексации и через указатель. При выводе матриц следить за тем, чтобы ширина...

Поменять местами первый отрицательный и последний положительный элемент массива - C++
Поменять местами первый отрицательный и последний положительный елемент массива. Учесть возможность того, что отрицательные или...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.12.2010, 16:32
Ответ Создать тему
Опции темы

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