Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
2 / 2 / 1
Регистрация: 26.02.2012
Сообщений: 42
1

Поменять местами первый и последний положительный элементы(указатели)

03.03.2012, 18:28. Показов 2278. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Си. Задание заключается в том, чтобы максимально много использовать в коде указатели. (без malloc() free() и тп) Мой код неверен (привел в виде примера), кучу глупостей вижу, но уже больше не могу
Насколько я понимаю в верном решении еще и переменные perv и posl должны быть указателями?
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>
/*В заданном одномерном массиве целого типа поменять местами следующие 2 элемента:
первый и последний положительные.*/
void main()
{
    int a[3];
    int *i, *j, perv, posl, temp;
    for (i=a; i<a+3; i++)
    {
        scanf("%d", i);
        if (*i>0)
            posl = *i; //находим последний положительный элемент массива
    }
    for (j=a; j<a+3; j++)
    {
        if (*j>0)
        {
            perv = *j; //находим первый положительный элемент массива
            break;
        }
    }
    printf("\n");
    temp = *i;
    *i = *j;
    *j = temp;
    printf("%d\n", *(a+0));
    printf("%d\n", *(a+1));
    printf("%d\n", *(a+2));
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2012, 18:28
Ответы с готовыми решениями:

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

В массиве поменять местами 2 элемента: первый положительный и последний отрицательный
Помогите пожалуйста написать: В заданном одномерном массиве целого типа поменять местами...

Поменять местами первый и последний элементы последовательности
Есть у меня задание, вот только не совсем понимаю принцип работы с файлами... Дана...

Поменять местами первый и последний элементы в текстовом файле
Имеется структура: struct list {int num; // номер char author; // автор ...

11
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
03.03.2012, 18:36 2
C
1
int i, j, perv, posl, temp;
C
1
for (i=0; i<3; i++)...
C
1
if ( *(a + i ) > 0 )...
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
03.03.2012, 18:39 3
Открою Великую Тайну Бытия (далее ВТБ):
perv пишется как first
posl пишется ка last
0
5 / 5 / 0
Регистрация: 22.09.2010
Сообщений: 104
03.03.2012, 18:39 4
Цитата Сообщение от Toshkarik Посмотреть сообщение
C
1
int i, j, perv, posl, temp;
C
1
for (i=0; i<3; i++)...
C
1
if ( *(a + i ) > 0 )...
Так не пойдет
0
2 / 2 / 1
Регистрация: 26.02.2012
Сообщений: 42
03.03.2012, 18:41  [ТС] 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
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
/*В заданном одномерном массиве целого типа поменять местами следующие 2 элемента: первый и последний положительные.*/
void main()
{
    int a[3];
    int *i, *perv, *posl;
    perv = posl = a;
    for (i=a; i<a+3; i++)
    {
        scanf("%d", i);
        if (*i>0)         //находим последний положительный элемент массива
            *posl = *i;
    }
    for (i=a; i<a+3; i++) //находим первый положительный элемент массива
    {
        if (*i>0)
        {
            *perv = *i;
            break;
        }
    }
    printf("%d\n", *perv);
    printf("%d\n", *posl);
    getch();
}
но строка perv = posl = a; неверна, а иначе проиницализировать указатели я не понимаю как
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
03.03.2012, 18:46 6
вот:
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>
int main()
{
    struct{int a,b,c;} abc;
    int*p=&abc.a;
    int*e=p+sizeof(abc)/sizeof(int);
    int*i=0,*j=0,*a=0,*b=0,temp;
    for(i=p;i<e;i++)scanf("%d",i);
    for(i=p;i<e;i++){ 
        if(*i>0)if(!a)a=i;
        if(*i>0)b=i;
    }
    printf("\n");
    temp = *a;
    *a = *b;
    *b = temp;
    printf("%d\n", *(p+0));
    printf("%d\n", *(p+1));
    printf("%d\n", *(p+2));
    return 0;
}
added: fixed
1
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
03.03.2012, 18:51 7
Franz Crawl, что не пойдет?
0
2 / 2 / 1
Регистрация: 26.02.2012
Сообщений: 42
03.03.2012, 18:52  [ТС] 8
Цитата Сообщение от Adler Посмотреть сообщение
вот:
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>
int main()
{
    struct{int a,b,c;} abc;
    int*p=&abc.a;
    int*e=p+sizeof(abc)/sizeof(int);
    int*i=0,*j=0,*a=0,*b=0,temp;
    for(i=p;i<e;i++)scanf("%d",i);
    for(i=p;i<e;i++){ 
        if(*i>0)if(!a)a=i;
        if(*i>0)b=i;
    }
    printf("\n");
    temp = *a;
    *a = *b;
    *b = temp;
    printf("%d\n", *(p+0));
    printf("%d\n", *(p+1));
    printf("%d\n", *(p+2));
    return 0;
}
added: fixed
Спасибо за помощь, но нужно без структур и всяких функций.
0
80 / 80 / 19
Регистрация: 07.05.2009
Сообщений: 316
03.03.2012, 18:54 9
ок, тогда так:
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>
int main()
{
    int arr[3];
    int*p=&arr[0];
    int*e=p+3;
    int*i=0,*j=0,*a=0,*b=0,temp;
    for(i=p;i<e;i++)scanf("%d",i);
    for(i=p;i<e;i++){ 
        if(*i>0)if(!a)a=i;
        if(*i>0)b=i;
    }
    printf("\n");
    temp = *a;
    *a = *b;
    *b = temp;
    printf("%d\n", *(p+0));
    printf("%d\n", *(p+1));
    printf("%d\n", *(p+2));
    return 0;
}
1
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
03.03.2012, 19:02 10
Tkas,

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
#include <stdio.h>
 
int main() {
   int A[] = { -1, 2, -3, 10, 4, -6, 1, 9 };
   int * first = A;
   int * last;
   int * end = A + (sizeof(A) / sizeof(*A));
 
   while (*(++first) <= 0);
   
   for (int * p = A; p < end; p++) {
      if (*p > 0) {
         last = p;
      }
   }
   
   *first ^= *last;
   *last ^= *first;
   *first ^= *last;
   
   for (int * p = A; p < end; p++) {
      printf("%d ", *p);
   }
 
   return 0;
}
http://liveworkspace.org/code/... 713dea526a
1
2 / 2 / 1
Регистрация: 26.02.2012
Сообщений: 42
03.03.2012, 19:05  [ТС] 11
Цитата Сообщение от nameless Посмотреть сообщение
Tkas,

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
#include <stdio.h>
 
int main() {
   int A[] = { -1, 2, -3, 10, 4, -6, 1, 9 };
   int * first = A;
   int * last;
   int * end = A + (sizeof(A) / sizeof(*A));
 
   while (*(++first) <= 0);
   
   for (int * p = A; p < end; p++) {
      if (*p > 0) {
         last = p;
      }
   }
   
   *first ^= *last;
   *last ^= *first;
   *first ^= *last;
   
   for (int * p = A; p < end; p++) {
      printf("%d ", *p);
   }
 
   return 0;
}
http://liveworkspace.org/code/... 713dea526a
Курс C начался в пару недель назад, sizeof и ^= и проч мы еще не проходили
Например в моем последнем приведенном примере меня интересует как правильно объявить указатели *perv и *posl? Иначе 1 и последний элементы будут равны.
1
0 / 0 / 0
Регистрация: 09.04.2013
Сообщений: 11
17.04.2013, 20:53 12
nameless, не могли бы вы описать что значат эти строки
C
1
int * end = A + (sizeof(A) / sizeof(*A));
и
C
1
while (*(++first) <= 0);
0
17.04.2013, 20:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2013, 20:53
Помогаю со студенческими работами здесь

Поменять местами первый и последний отрицательные элементы одномерного массива
Поменять местами первый и последний отрицательные элементы од-номерного массива. Если отрицательных...

Как поменять местами последний нулевой элемент и первый максимальный элементы?
Как поменять местами последний нулевой элемент и первый максимальный элементы?

На побочной диагонали матрицы поменять местами первый максимальный и последний минимальный элементы
В этой задачи задана матрица вещественных чисел A.Нужно в побочной диагонеале матрицы найти первый...

Поменять местами первый положительный элемент с последним отрицательным
вот задача, дан массив 100 целых чисел,надо поменять первое положительное с последим отрицательным....


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

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