Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Написание проги с одномерным массивом! Помогите исправить ошибку! 
:(
    Опции темы
Baton2007
Дата 12.12.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Мне дали задание: Дано натуральное число N  и последовательность A1 , A2 , ...... An состоящая из N чисел . Надо получить последовательность , которая в отличается от исходной тем , что все нечетные элементы удвоены.
Мне нужно написать эту прогарамму с помощью датчика случайных чисел (random) и одномерного массива.
Я написал вот такую
Код
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <ctime>

int main()
{
   int n=10;
   int A[n];
   srand(time(0));
   for (int i=0;i<n;i++)
   {
       A[i]=rand()%10;
       printf("%3i",A[i]);
   }
   printf("\n");
   for (int i=1;i<n;i+=2)
       A[i]=A[i]<<1;
   for (int i=0;i<n;i++)
       printf("%3i",A[i]);
   getch();
}



Ноработает она не коректно объясните почему и помогите исправить!
PM MAIL   Вверх
Alek86
Дата 12.12.2007, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



в чем именно некорректность?


--------------------
user posted image    user posted image
PM MAIL   Вверх
Baton2007
Дата 12.12.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Именно в том что  она не удваивает нечетные члены массива а должна удваивать!
PM MAIL   Вверх
crazy_hand
Дата 12.12.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Ты при проверке какую индексацию подразумеваешь: с нуля или с единицы? Если с нуля, то тебе нужно цикл с i=0 начинать, если с единицы - то у тебя все правильно.
PM MAIL ICQ   Вверх
Baton2007
Дата 12.12.2007, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



С нуля т.к рандомом задается если я не ошибаюсь с 0 до 10!
PM MAIL   Вверх
crazy_hand
Дата 12.12.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



причем здесь рандом? Ты когда exe смотришь и проверяешь результат считаешь с нуля или с единицы? Если с единицы - то у тебя все правильно. Если с нуля то цикл
Код
 for (int i=1;i<n;i+=2)
       A[i]=A[i]<<1;

нужно начинать с 0, т.е.
Код
 for (int i=0;i<n;i+=2)
       A[i]=A[i]<<1;

PM MAIL ICQ   Вверх
bsa
Дата 12.12.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Работать должно. Попробуй в printf заменить "%3i" на "%3i ". И перед getch() поставь printf("\n");

Добавлено через 1 минуту и 20 секунд
crazy_hand, все с точностью до наоборот: 0 - это четное число.
PM   Вверх
crazy_hand
Дата 12.12.2007, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Да, все верно, 0 - четное число.
Если у него цикл с 1: смотрим результат - если считать с 0, то результат неверный, а если считать с 1, то все правильно. Соответственно если в цикле начинать с i=0, то тогда считая ответ начиная с 0 - все верно будет.

У меня все пашет на ура. Только к n пришлось модификатор const добавить ;)
PM MAIL ICQ   Вверх
bsa
Дата 12.12.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Baton2007, тебе надо удваивать нечетные элементы или элементы, стоящие на нечетных позициях?
PM   Вверх
crazy_hand
Дата 12.12.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



bsa
мда, судя по сорцу - элементы на нечетных позициях, судя по постам - нечетные элементы

Baton2007
Посмотри, может тебе так нужно?:
нечетные элементы :
Код
for (int i=0;i<n;i++)
       if( A[i]%2 ) A[i]=A[i]<<1;


Это сообщение отредактировал(а) crazy_hand - 12.12.2007, 16:44
PM MAIL ICQ   Вверх
Baton2007
Дата 12.12.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Надо удваивать нечетные элементы а не элементы стоящие на нечетных позициях!
PM MAIL   Вверх
bsa
Дата 12.12.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Замени:
Код
   for (int i=1;i<n;i+=2)
       A[i]=A[i]<<1;
На:
Код
   for (int i=0;i<n;i++)
       if (A[i]%2) 
            A[i] *= 2;

PM   Вверх
SergeCpp
Дата 12.12.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Можно и без условия

A[ i ] = A[ i ] << ( A[ i ] & 1 );

P.S.

A[ i ] <<= A[ i ] & 1;


Это сообщение отредактировал(а) SergeCpp - 12.12.2007, 17:19
PM MAIL WWW ICQ   Вверх
crazy_hand
Дата 12.12.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 12.12.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



SergeCpp
найс, мог бы ставить плюсы - поставил бы smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.