Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2015, 05:20   #1
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию Задача с массивами. Указатель и +=

Цитата:
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1) Номер минимального элемента массива;
2) Сумму элементов массива, расположенных между первым и вторым отрицательными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, а потом — все остальные
Пытался понять коды написанные здесь для подобного задания: http://www.cyberforum.ru/cpp-beginne...ead172384.html

Я полный новичек и не знаю что означают многие функции навроде:

srand(time(NULL));

size_t ind=min_element(arr, arr+n, find_less_mod)-arr;


Как пользоваться указателями тоже не до конца ясно. (Visual Studio сломалась, онлайн-симуляторы нормально работать не хотят, так что методом тыка понять что это дает мне пока недоступно)

Мне относительно ясен этот код для задания похожего на мое, но решительно непонятно что здесь делает указатель * и s+=abs(a[i])
Код:
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
void main()
{
    int i,n,i_min,min,ot,s=0;
    cout<<"  N=";
    cin>>n;
    int *a=new int [n];
    cout<<"\n  Enter elements: ";
     for(i=0;i<n;i++) cin>>a[i]; //ввод массива;
    i_min=0;
    min=abs(a[i]); 
     for(i=1;i<n;i++) 
      if(abs(a[i])<min) { min=a[i]; i_min=i; } //поиск минимального по модулю элемента массива;
     for(i=0;i<n;i++) 
      if(a[i]<0) { ot=i; break; } //поиск первого отрицательного элемента;
     for(i=ot;i<n;i++) s+=abs(a[i]); //сумма модулей элементов массива, расположенных после первого отрицательного элемента;
    cout<<"\n\n  i_min="<<i_min+1;
    cout<<"\n  S="<<s; 
    delete []a;    
    getch();
}


Объясните что делает в этом коде указатель и +=, по возможности напишите мое задание только с использованием указанных библиотек и без использования функций, которых полный новичок не знает.

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>

Хочу понять логику вычислений, а использование множества функций и библиотек, которые мне неизвестны, жутко запутывает ( Да и онлайн-симуляторы С не читают другие библиотеки навроде conio ).
Да и если за основу я возьму ваше решение, то должно выглядеть так, что его придумал студент-первокурсник знающий только основы, которым я и являюсь.

Последний раз редактировалось jirtreck; 22.10.2015 в 05:24.
jirtreck вне форума Ответить с цитированием
Старый 22.10.2015, 07:52   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Я полный новичек и не знаю что означают многие функции навроде:

srand(time(NULL));
Ну почитайте документацию по функции time и по функции srand.
http://www.cplusplus.com/reference/ctime/time/
http://www.cplusplus.com/reference/cstdlib/srand/

size_t это просто тип для беззнаковых целых чисел (что-нибудь типа unsigned long, зависит от компилятора), его принято использовать для хранения размеров и т.п. вместо например просто int.


А чего про += непонятно? Там просто добавление значения i-того элемента массива к s.
a += b это почти тоже самое, что a = a + b
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 22.10.2015, 13:04   #3
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Я указывал функцию srand(time(NULL)) не как корень всех бед, а как пример тех функций, которые мне могут быть не ясны и подобные им нежелательно использовать при решении моей задачи.
То же и с min_element, а не size_t ( Который я и так нашел )

Впервые увидел +=, поэтому захотелось уточнить, так лучше, чем быть введенным в заблуждение.
Благодарю за пояснение!

Все-таки, какой смысл здесь использовать указатель * ?
Как бы код изменился, если бы его не использовали вовсе?

Последний раз редактировалось jirtreck; 22.10.2015 в 13:06.
jirtreck вне форума Ответить с цитированием
Старый 22.10.2015, 13:18   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
То же и с min_element, а не size_t ( Который я и так нашел )
Ну вы же даже не искали. Это все стандартное http://www.cplusplus.com/reference/a...m/min_element/

Цитата:
Все-таки, какой смысл здесь использовать указатель * ?
Т.к. кол-во элементов заранее не известно, то используют динамическое выделение памяти - получаем указатель. Вы код то смотрели?

Цитата:
Как бы код изменился, если бы его не использовали вовсе?
Ну как вариант, задать очень большую константу М + статический массив размера М и молится, чтобы введенное н было меньше М; ну или задать н константой и преподу сказать только н элементов.
p51x вне форума Ответить с цитированием
Старый 22.10.2015, 13:35   #5
jirtreck
Пользователь
 
Регистрация: 29.06.2011
Сообщений: 56
По умолчанию

Благодарю!

Ситуация с функциями надуманная у меня, надо с этим разбираться.
( Часто бывало, что некоторые детали функций вводили в ступор и не было ясно как использовать её мне самому, поиск ничего конкретного не давал. Теперь знаю английский источник со всеми функциями, буду стараться понимать)

Про указатели ничего толком не понял, когда изучал, из этого не дошло к чему он вообще нужен в этом коде.
Запомнил такое применение, еще раз спасибо
jirtreck вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с массивами grooveone Паскаль, Turbo Pascal, PascalABC.NET 3 12.02.2014 22:23
Задача с массивами. Ghost665 Помощь студентам 3 11.12.2012 23:26
Задача с массивами my_blood_is_blue Помощь студентам 6 29.12.2011 00:08
Задача с массивами investr Паскаль, Turbo Pascal, PascalABC.NET 1 30.11.2011 21:43
Задача с Массивами Fender92 Паскаль, Turbo Pascal, PascalABC.NET 0 17.03.2011 11:53