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

Дан массив целых чисел. Записать его элементы в обратном порядке. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
lampard14
8 / 8 / 2
Регистрация: 21.11.2012
Сообщений: 93
21.11.2012, 19:00     Дан массив целых чисел. Записать его элементы в обратном порядке. #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
#include "stdafx.h"
#include "math.h"
 
void main()
{int const n=3;
int a[n], b[n], i;
printf("Vvedite elementi massiva \n");
 
for(i=0;i<n;i++)
     {scanf_s ("%i",&a[i]);}
 
for (i=0;i<n;i++)
     {printf ("%i \t",a[i]);}      
 
printf ("\n");                      
 
 
for (i=0;i<n;i++)
     {b[i]=a[i];
      a[i]=a[n-i];
      a[n-i]=b[i];}
 
for (i=0;i<n;i++)
     {printf ("%i \t",a[i]);}
printf ("\n");
}

Сформировать массив простых чисел, не превышающих заданное натуральное число N.
Но программка по моему коду формирует массив простых чисел (введённое мной их кол-во), а нужно, чтобы находило все простые числа до указ. числа. Что тут не так?

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
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
void main()
{
int const n=100; 
int A[n];
int m, k, i, c, b=0;
printf("Vvedite chislo: \t");
scanf("%i",&c);
for(i=0, m=2; i<c; m++) 
{           for (k=0; k<i; k++)
             if (m%A[k]==0)
                 break;
             if (i==k)
                 A[i++]=m;
}
 
for(i=0;i<c;i++) 
printf("%i \t ", A[i]);
printf ("\n");
 
 
}
и помогите с этим:
Последовательность а1, а2, ..., an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.


Заранее огромнейшее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2012, 19:00     Дан массив целых чисел. Записать его элементы в обратном порядке.
Посмотрите здесь:

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке C++
Array7°. Дан массив размера N. Вывести его элементы в обратном порядке. C++
C++ Дан одномерный массив.Не используя других массивов переставить его элементы в обратном порядке.
C++ Дан символьный файл f. Записать в файл g элементы файла f в обратном порядке
Дан одномерный массив. Не используя других массивов, переставить его элементы в обратном порядке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2012, 19:13     Дан массив целых чисел. Записать его элементы в обратном порядке. #2
Цитата Сообщение от lampard14 Посмотреть сообщение
Дан массив целых чисел. Записать его элементы в обратном порядке.
C++
1
2
for (int i = 0; i < SIZE / 2; ++i)
    std::swap(arr[i], arr[SIZE - i - 1]);
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 19:18     Дан массив целых чисел. Записать его элементы в обратном порядке. #3
Цитата Сообщение от go Посмотреть сообщение
C++
1
2
for (int i = 0; i < SIZE / 2; ++i)
    std::swap(arr[i], arr[SIZE - i - 1]);
Зачем ж так, если есть
C++
1
std::reverse(arr, arr + SIZE);
lampard14
8 / 8 / 2
Регистрация: 21.11.2012
Сообщений: 93
21.11.2012, 19:21  [ТС]     Дан массив целых чисел. Записать его элементы в обратном порядке. #4
Цитата Сообщение от go Посмотреть сообщение
C++
1
2
for (int i = 0; i < SIZE / 2; ++i)
    std::swap(arr[i], arr[SIZE - i - 1]);
Огромное спасибо за подсказку. Был бы очень рад, если бы помогли со 2(про простые числа)

Добавлено через 1 минуту
Цитата Сообщение от MrGluck Посмотреть сообщение
Зачем ж так, если есть
C++
1
std::reverse(arr, arr + SIZE);
C++
1
2
for (i=0;i<n;i++)
     {b[i]=a[n-i-1];}
у меня вот так заработало))
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 19:21     Дан массив целых чисел. Записать его элементы в обратном порядке. #5
Цитата Сообщение от lampard14 Посмотреть сообщение
и помогите с этим:
Последовательность а1, а2, ..., an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы.
C++
1
std::sort(arr, arr + SIZE);
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2012, 19:24     Дан массив целых чисел. Записать его элементы в обратном порядке. #6
Цитата Сообщение от MrGluck Посмотреть сообщение
Зачем ж так, если есть
ну std::swap я зря заюзал. Лень было свой писать. ТС скорее всего хочет все ручками писать без STL.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 19:31     Дан массив целых чисел. Записать его элементы в обратном порядке. #7
Цитата Сообщение от go Посмотреть сообщение
ну std::swap я зря заюзал. Лень было свой писать. ТС скорее всего хочет все ручками писать без STL.
Раз уж STL, так лучше нужный алгоритм.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2012, 19:41     Дан массив целых чисел. Записать его элементы в обратном порядке. #8
Цитата Сообщение от MrGluck Посмотреть сообщение
Раз уж STL, так лучше нужный алгоритм.
Я не использовал STL. Просто для внятности. Так лучше?
C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
void swap(T& a, T& b)
{
    T t = a;
    a = b;
    b = t;
}
 
for (int i = 0; i < SIZE / 2; ++i)
    swap(arr[i], arr[SIZE - i - 1])
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 19:44     Дан массив целых чисел. Записать его элементы в обратном порядке. #9
Цитата Сообщение от go Посмотреть сообщение
Я не использовал STL
Как это не использовал?
std::swap чисто случайно в algorithm.h и шаблонная?
C++
1
2
3
4
template <class T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2012, 19:45     Дан массив целых чисел. Записать его элементы в обратном порядке. #10
Цитата Сообщение от MrGluck Посмотреть сообщение
std::swap чисто случайно в algorithm.h и шаблонная?
Прочтите еще раз мой пред. пост.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 19:55     Дан массив целых чисел. Записать его элементы в обратном порядке. #11
Цитата Сообщение от go Посмотреть сообщение
Прочтите еще раз мой пред. пост.
Цитата Сообщение от go Посмотреть сообщение
C++
1
2
for (int i = 0; i < SIZE / 2; ++i)
    std::swap(arr[i], arr[SIZE - i - 1]);
По-моему, реализация несколько отличается от
C++
1
2
3
4
5
6
7
template <typename T>
void swap(T& a, T& b)
{
    T t = a;
    a = b;
    b = t;
}
Или вы это в алгоритме правили?) Раз уж пространство имен std использовали.

Вы наверняка должны знать, что именно вызовется в строчке
C++
1
std::swap(arr[i], arr[SIZE - i - 1]);
Если нет - можете дописать в собственной реализации вывод текста на экран и убедиться, что при указании полного имени функции, ваша ни на что не повлияет.
Зачем юлить то так, ну ошибся - swap конечно намного тривиальней других функций из STL.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2012, 20:00     Дан массив целых чисел. Записать его элементы в обратном порядке. #12
MrGluck, значит еще раз читаем тот пост.
Цитата Сообщение от MrGluck Посмотреть сообщение
Если нет - можете дописать в собственной реализации вывод текста на экран и убедиться,
Мне это не надо. Это очевидные вещи.
Цитата Сообщение от MrGluck Посмотреть сообщение
Вы наверняка должны знать, что именно вызовется в строчке Код C++1
std::swap(arr[i], arr[SIZE - i - 1]);
У меня нет этой строчки.
Я не понимаю, почему Вы так невнимательно смотрите.
Я не использовал STL. Просто для внятности. Так лучше?
просто написать swap, не реалиовав ее нельзя, а реализовывать мне было ее лень.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 20:14     Дан массив целых чисел. Записать его элементы в обратном порядке. #13
Цитата Сообщение от go Посмотреть сообщение
MrGluck,
У меня нет этой строчки.
Я не понимаю, почему Вы так невнимательно смотрите.
Мне показалось место, где go использует функцию swap, но она не из STL

Разговор был про то, что в вашем первом посте используется функция из STL, но её применение неэффективно ввиду существования уже готовой реализации алгоритма std::reverse. То, что далее вы потом использовали собственную реализацию я не оспариваю, но нельзя отрицать тот фактор, что в своем первом посте вы имели ввиду именно готовую функцию.

Добавлено через 7 минут
Дан массив целых чисел. Записать его элементы в обратном порядке.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
    const int N = 5;
    int a[N] = {1, 2, 3, 4, 5};
    for (int i=0; i < N; i++)
        std::cout<< a[i]<< " ";
    std::cout<< std::endl;
 
    for (int i=0; i < N/2; i++)
    {
        int tmp = a[i];
        a[i] = a[N - i - 1];
        a[N - i - 1] = tmp;
    }
 
    for (int i=0; i < N; i++)
        std::cout<< a[i]<< " ";
    std::cout<< std::endl;
    return 0;
}
Думаю на том и порешаем
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2012, 20:50     Дан массив целых чисел. Записать его элементы в обратном порядке. #14
Цитата Сообщение от MrGluck Посмотреть сообщение
вы имели ввиду именно готовую функцию.
Нет. Я дал понять, о какой функции идет речь. Это мы с Вам знаем, что такое swap. ТС может не догадываться о ее существовании.
Цитата Сообщение от MrGluck Посмотреть сообщение
но её применение неэффективно ввиду существования уже готовой реализации алгоритма std::reverse.
Конечно, незачем изобретать велосипед, и увеличивать код. Но позвольте узнать: чем она эффективнее??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 21:36     Дан массив целых чисел. Записать его элементы в обратном порядке.
Еще ссылки по теме:

C++ дан массив целых чисел переставить его элементы так, чтобы отрицательные оказались в начале, положительные - в конце
Дан массив ненулевых целых чисел. Определить, сколько раз элементы массива при просмотре от его начала меняют знак. Например, в массиве 10, -4, 12, -4 C++
Дан массив размера 10. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,428
21.11.2012, 21:36     Дан массив целых чисел. Записать его элементы в обратном порядке. #15
Цитата Сообщение от go Посмотреть сообщение
Конечно, незачем изобретать велосипед, и увеличивать код. Но позвольте узнать: чем она эффективнее??
Вы сами ответили на свой вопрос. Лаконичное написание увеличивает удобочитаемость кода и упрощает понимание, все начинается с мелочей. ТС-у ничего не мешало прогуглить реализацию функции и, догадавшись о её примерном механизме, да хотя бы по названия переменных, создать нечто похожее свое. Но ведь так поступают лишь единицы, большинство, видя что не хватает какого-то инклуда, просто добавляют нужное и юзают готовое, и скушал бы он ваш метод с i = 0, arr/2, даже не зная о том, что есть reverse. Если бы не было явного указания области видимости функции, то ваш пост был бы воспринят исключительно как алгоритм, а не конечная реализация. Можно ведь было написать swap и это означало бы действие, а не функцию. Согласитесь, результаты запроса в поисковике std::swap и swap отличаются и первое направило бы его по пути STL, а там есть вариант и получше, как я и указал.
Yandex
Объявления
21.11.2012, 21:36     Дан массив целых чисел. Записать его элементы в обратном порядке.
Ответ Создать тему
Опции темы

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