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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Указатели, массивы 
:(
    Опции темы
Tester123
Дата 16.5.2012, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такое задание нужно сделать на с++ в консольном приложении:

В одномерном массиве, состоящем из n вещественных элементов, вычислить: 
1) максимальный элемент массива; 
2) сумму элементов массива, расположенных до последнего положительного элемента. 
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [а, Ь]. Освободившиеся в конце массива элементы заполнить нулями. 
3) Создать вектор и поместить в него полученный в п.2 массив. Вывести содержимое вектора на экран. 

Для доступа к элементам массивов в работе пользоваться только указателями! 
Для заполнения массива использовать функцию int rand(), которая возвращает при каждом обращении к ней псевдослучайное целое число из диапазона 0...0x7fff. 

Сложно ли это сделать? Не могли бы помочь?
PM MAIL   Вверх
borisbn
Дата 16.5.2012, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



> 2) сумму элементов массива, расположенных до последнего положительного элемента.
> псевдослучайное целое число из диапазона 0...0x7fff.

1) ты сам задание-то понял?
2) показывай, что у тебя получилось. Иначе -в ЦП 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Tester123
Дата 16.5.2012, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Честно? Я вообще не понимаю как это сделать. Думаю про псевдослучайное число можно опустить.
PM MAIL   Вверх
shara
Дата 17.5.2012, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Tester123 @  16.5.2012,  19:09 Найти цитируемый пост)
Сложно ли это сделать?

нет


Цитата(borisbn @  16.5.2012,  19:40 Найти цитируемый пост)
показывай, что у тебя получилось. Иначе -в ЦП  

+1



Tester123
смысл "доброму дяде" за тебя выполнять задание школьного курса по программированию?


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
susanin
Дата 17.5.2012, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @  16.5.2012,  20:40 Найти цитируемый пост)
псевдослучайное целое число из диапазона 0...0x7fff.

ну а чего тут такого то? функция rand() выдает как раз псевдослучайные числа..а значит надо нарандомить числа от 0 до 32767
PM MAIL   Вверх
bsa
Дата 17.5.2012, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
borisbn
Дата 17.5.2012, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



susanin, меня смутил пункт про 
Цитата(Tester123 @  16.5.2012,  20:09 Найти цитируемый пост)
 сумму элементов массива, расположенных до последнего положительного элемента. 

вкупе с тем, что все числа там положительные, а вовсе не то, что генератор д.б. от 0 до 32767

Это сообщение отредактировал(а) borisbn - 17.5.2012, 12:42


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
susanin
Дата 17.5.2012, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @ 17.5.2012,  12:42)
susanin, меня смутил пункт про 
Цитата(Tester123 @  16.5.2012,  20:09 Найти цитируемый пост)
 сумму элементов массива, расположенных до последнего положительного элемента. 

вкупе с тем, что все числа там положительные, а вовсе не то, что генератор д.б. от 0 до 32767

ну я понимаю это следующим образом...есть массив
1 2 3 4 5 -6 -7 -9 5 13 28 - 163 - 13
смотрим в массив и ищем последнее положительно число..это 28..значит нужно посчитать сумму всех элементов, которые расположены в массиве до него..но тут правда вопрос действительно, почему генерировать от 0 тогда надо..

Это сообщение отредактировал(а) susanin - 17.5.2012, 13:54
PM MAIL   Вверх
borisbn
Дата 17.5.2012, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(susanin @  17.5.2012,  13:53 Найти цитируемый пост)
ну я понимаю это следующим образом...есть массив

откуда в нём возьмутся отрицательные числа, если в задании сказано
Цитата(Tester123 @  16.5.2012,  20:09 Найти цитируемый пост)
Для заполнения массива использовать функцию int rand(), которая возвращает ... число из диапазона 0...0x7fff. 


Tester123, давай... включайся в дискуссию... или тебе это неинтересно ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Dov
Дата 17.5.2012, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(borisbn @  17.5.2012,  14:13 Найти цитируемый пост)
откуда в нём возьмутся отрицательные числа

А если как-то так?
Код
    const int SIZE = 10;
    double arr[SIZE];

    for(double* p = arr; p < arr + SIZE; p++)    
        *p = double(rand() - rand());



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
borisbn
Дата 17.5.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



susaninDov, думаете, я не знаю, как можно при помощи rand() сделать отрицательные числа ?
я просто хотел, чтобы ТС поучаствовал в своей же теме


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Tester123
Дата 17.5.2012, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я думаю про генерацию чисел от нуля можно опустить. Числа могут быть положительные и отрицательные. Но как всё это сделать, ума не приложу.
PM MAIL   Вверх
t_gran
Дата 18.5.2012, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код на C, но я думаю вас устроит. smile
Код

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

//----------------------------------------------//
// Задание случайных значений
void Random(float* arr, size_t size)
{
   srand(time(NULL));

   float* end = arr + size;
   for (; arr < end; ++arr)
   {
      *arr = (float)(rand() - rand()) / 100;
   }
}
//----------------------------------------------//
// Вывод массива на экран
void Print(float* arr, size_t size)
{
   float* end = arr + size;
   for (; arr < end; ++arr)
   {
      printf("%0.2f ", *arr);
   }
   printf("\n");
}
//----------------------------------------------//
// Нахождение максимального элемента
float* GetMax(float* arr, size_t size)
{
   float* end = arr + size;
   float* min = arr;

   for (++arr; arr < end; ++arr)
   {
      if (*arr < *min)
      {
         min = arr;
      }
   }

   return min;
}
//----------------------------------------------//
// Поиск первого положительного элемента с хвоста
float* GetPositiveFromTail(float* arr, size_t size)
{
   float* end = arr + size - 1;

   for (; (arr <= end) && (*end < 0); --end);

   if (end < arr)
   {
      end = NULL;
   }

   return end;
}
//----------------------------------------------//
// Определение суммы элементов начиная с первого
// до последнего положительного
float GetSumm(float* arr, size_t size)
{
   float value = 0;

   float* end = GetPositiveFromTail(arr, size);

   for (; arr < end; ++arr)
   {
      value += *arr;
   }

   return value;
}
//----------------------------------------------//
// Обнуление элементов которые входят по модулю
// в диапазон [min, max]
void ZeroingElements(float* arr, size_t size, float min, float max)
{
   float* end = arr + size;
   for (; arr < end; ++arr)
   {
      if ((min <= abs(*arr)) && (abs(*arr) <= max))
      {
         *arr = 0;
      }
   }
}
//----------------------------------------------//
// Классический свап
void Swap(float* first, float* second)
{
   float buff = *first;
   *first = *second;
   *second = buff;
}
//----------------------------------------------//
// Упаковка массива путём смещения нулевых значений
// в хвост. Возвращает длину массива без учёта нулей.
size_t Pack(float* arr, size_t size)
{
   float* end = arr + size;
   float* cur = arr;

   while (cur < end)
   {
      for (; (cur < end) && (*cur == 0); ++cur);

      if ((cur < end) && (cur != arr))
      {
         Swap(cur, arr);
      }

      cur++;
      arr++;
   }

   return size - (cur-arr);
}
//----------------------------------------------//

int main()
{
   size_t sizeSrc;
   printf("input array size: ");
   scanf("%d", &sizeSrc);

   float* src = (float*)malloc(sizeof(float) * sizeSrc);

   Random(src, sizeSrc);
   Print(src, sizeSrc);

   printf("min = %0.2f\n", *GetMax(src, sizeSrc));
   printf("summ = %0.2f\n", GetSumm(src, sizeSrc));

   // Обнуляем диапазон от 0 до 100
   ZeroingElements(src, sizeSrc, 0, 100);
   Print(src, sizeSrc);

   size_t sizeDest = Pack(src, sizeSrc);
   float* dest = (float*)malloc(sizeof(float) * sizeDest);

   memcpy(dest, src, sizeof(float) * sizeDest);
   Print(dest, sizeDest);

   free(dest);
   free(src);

   system("pause");

   return 0;
}

user posted image

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  archive.zip 3,44 Kb


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Tester123
Дата 18.5.2012, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Большое спасибо. Только по-моему тут считается минимальное, а не максимальное число, или я не прав?
PM MAIL   Вверх
t_gran
Дата 19.5.2012, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Tester123, да, чуть ошибся. В функции GetMax меняем переменную min на max. В 38-ой строчке меняем знак "<" на ">"


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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