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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
#1

Почему для поиска по массиву берется значение его первого элемента, а не ноль? - C++

09.05.2014, 23:16. Просмотров 695. Ответов 33
Метки нет (Все метки)

Свем доброго времени суток и всех с праздником!
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    setlocale ( LC_ALL,"Rus" );
    const int n = 10;
    int arr[n];
    cout << "элементы массива ";
    for ( int i=0; i<n; i++ )
    cout << ( arr[i] = -10 + rand()%21 ) << " | ";
    cout << endl;
    int min = arr[0];
    int max = arr[0];
    int summa = 0;
    int summa2 = 0;
    cout << "отсортированный массив ";
    for ( int i=0; i<n-1; i++ )
    for( int k=0; k<n-1; k++ )
    if ( arr[k] > arr[k+1] )
{
    swap (arr[k], arr[k+1]);
}
    for ( int i=0; i<n; i++ )
{
    cout << arr[i] << " | ";
    if ( min > arr[i] )
    min = arr[i];
    if ( max < arr[i] )
    max = arr[i];
}
    cout << endl;
    cout << "максимальное значение " << max << endl;
    cout << "минимальное значение " << min << endl;
    for ( int i=0; i< 10; i++ )
    summa += arr[i];
    cout << "сумма положительных элементов " << summa << endl;
    for ( int i=0; i<n; i++ )
{
    if( arr[i] < 0 ) summa2 += arr[i];
}   
    cout << "сумма отрицательных элементов " << summa2;
    cout << endl;
    cout << "сумма всех элементов " << summa + summa2;
    cout << endl;
    return 0;
}
вот код программы. Один вопрос почему переменной min присваивается массив с первым элементом arr[0]? int min = arr[0]; и почему нельзя просто присвоить "нуль" без массива (что будет) и объясните пожалуйста поточнее ибо понимаю все не сразу...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 23:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему для поиска по массиву берется значение его первого элемента, а не ноль? (C++):

Изменить массив, уменьшив его нечетные элементы на значение первого четного элемента - C++
Описать динамический массив. Реализовать 2 способа инициализации массива (пользователь может сам выбрать способ сделать меню): -...

Ноль вместо первого элемента в алгоритме быстрой сортировки - C++
Здравствуйте, скопировал код из темы, хочу отсортировать массив, но почему-то в отсортированном массиве вместо первого элемента помещается...

Составить программу для нахождения первого элемента массива меньше десяти и его номера - C++
3)Известен целочисленный массив x1,х2,х3,…,х10. Составить программу для нахождения первого элемента меньше десяти и его номера. Если такого...

Почему нельзя обратиться к массиву, не указывая индекс его элемента - C (СИ)
Всем привет. вот часть кода. #define N 3 int main() { char *m = {&quot;First&quot;,&quot;Second&quot;,&quot;The last&quot;}; char *tmp; int...

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE - C#
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE, если выполнено указанное ниже...

Изменить массив, уменьшив его нечетные элементы на значение первого четного элемента - Pascal
Описать динамический массив. Реализовать 2 способа инициализации массива (пользователь может сам выбрать способ сделать меню): -...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia-22
8 / 7 / 2
Регистрация: 21.11.2013
Сообщений: 50
09.05.2014, 23:39 #2
Присваивается не нуль, а элемент массива за нумером нуль. То есть первый.

В строке:
C++
1
cout << ( arr[i] = -10 + rand()%21 ) << " | ";
При первом проходе цикла (i=0) генерируется рандомное число, которое записывается в массив и вызывается через arr[0]. Это если на пальцах.

И я не вижу фигурных скобок после for, они разве не нужны? По моему синтаксис цикла for выглядит так:
C++
1
2
3
  for (i = 0; i < 2; i++){
cout << i;
}
web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
09.05.2014, 23:44  [ТС] #3
C++
1
2
for ( int i=0; i<n; i++ )
    cout << ( arr[i] = -10 + rand()%21 ) << " | ";
тут? если да то один for действует одному cout-у
и еще момент, если в простом уже инициализированном массиве к примеру
C++
1
int arr[10] = {0,1,2,3,4,5,6,7,8,9}
я захочу вывести индекс элемента массива ну к примеру ввожу 4 а он выводит элемент массива 3 как это сделать?
S_el
2094 / 1601 / 307
Регистрация: 15.12.2013
Сообщений: 6,435
09.05.2014, 23:47 #4
Kuzia-22, фигурные скобки нужны чтобы объединить несколько смысловых строчек в блок.Для простого вывода они не требуются.
Хотя я их предпочитаю ставить,вдруг потом понадобится еще какой-то оператор в цикл впихнуть
web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
09.05.2014, 23:48  [ТС] #5
программа работает без скобок тоже это не верная запись? возможна потеря данных или не верная работа (вычисления) программы? меня учили так: один for один cout, а если нужно несколько cout-ов используй фигурные скобки
C++
1
2
3
4
for (int i=0; i<10; i++) 
{ cout << 1 << endl;
cout << 2 << endl;
}
S_el
2094 / 1601 / 307
Регистрация: 15.12.2013
Сообщений: 6,435
09.05.2014, 23:49 #6
Цитата Сообщение от web-magician Посмотреть сообщение
я захочу вывести индекс элемента массива ну к примеру ввожу 4 а он выводит элемент массива 3 как это сделать?
Обращайся поэлементно,при совпадении выводи.
web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
09.05.2014, 23:56  [ТС] #7
Цитата Сообщение от S_el Посмотреть сообщение
Обращайся поэлементно,при совпадении выводи.
то есть
C++
1
if (1) cout << arr[0];
примерно так? тогда он будет выводить все значения которые последуют за ними (потому что if-ов будет 10 штук ровно) и код получится длинным и нудным... а по другому никак? индекс элемента массива нужен.
Kuzia-22
8 / 7 / 2
Регистрация: 21.11.2013
Сообщений: 50
10.05.2014, 00:01 #8
web-magician, т.е. вы хотите сравнить содержимое ячейки с введеным числом и вывести индекс данной ячейки при совпадении?

Первое что приходит на ум сделать цикл, где поочередно перебрать все элементы массива и сравнить их с указаным числом. Как-то так:
C++
1
2
3
4
5
6
int arr[8];
int a;
cin >> a;
for (int i=0; i<8;i++){
if (a==arr[i]) {cout << "Index: " << i << " Element: " << arr[i];} // неплохо бы еще сверку типа докрутить
}

Не по теме:

P.S. Код может содержать синтаксические ошибки. Извините, пишу со смартфона, возможности скомпилить и проверить нет.

Цитата Сообщение от web-magician Посмотреть сообщение
меня учили так: один for один cout, а если нужно несколько cout-ов используй фигурные скобки
Меня вот учили подругому "Пиши коментарии или код, который можно будет прочесть при минимальном количестве коментариев". С тех пор для удобочитаемости ставлю скобки даже для одиночных операций

web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
10.05.2014, 00:02  [ТС] #9
Цитата Сообщение от Kuzia-22 Посмотреть сообщение
При первом проходе цикла (i=0) генерируется рандомное число, которое записывается в массив и вызывается через arr[0]. Это если на пальцах.
и каждый проход цикла что дает? а как получается что переменная min все же узнает что минимальное число именно то которое в действительности минимальное? там просто идет присвоение
C++
1
2
int min = arr[0]
if ( min > arr[i] )
как понять этот момент?
S_el
2094 / 1601 / 307
Регистрация: 15.12.2013
Сообщений: 6,435
10.05.2014, 00:05 #10
web-magician, что-то я вас плохо понимаю,что конкретно вас интересует?Обдумайте каждый шаг кода,там нет никаких синтаксических сложностей.
web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
10.05.2014, 00:07  [ТС] #11
Цитата Сообщение от Kuzia-22 Посмотреть сообщение
web-magician, т.е. вы хотите сравнить содержимое ячейки с введеным числом и вывести индекс данной ячейки при совпадении?
нет я просто хочу вывести элемент массива за которым будет стоять цифра введенная пользователем (естественно диапазон вводимых цифр не будет превышать элементов массива)
массив 0.1.2.3.4.5.6.7.8.9 ввожу 1 система выводит 0 первый элемент массива

Добавлено через 1 минуту
Цитата Сообщение от S_el Посмотреть сообщение
web-magician, что-то я вас плохо понимаю,что конкретно вас интересует?Обдумайте каждый шаг кода,там нет никаких синтаксических сложностей.
сложностей нет и для меня только вот хотелось понимать как это все работает в деталях???
Kuzia-22
8 / 7 / 2
Регистрация: 21.11.2013
Сообщений: 50
10.05.2014, 00:08 #12
web-magician, у вас массив сортируется же от меньшего к большему:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for ( int i=0; i<n-1; i++ ) // Cортируем
    for( int k=0; k<n-1; k++ )
    if ( arr[k] > arr[k+1] )
{
    swap (arr[k], arr[k+1]);
}
    for ( int i=0; i<n; i++ )
{
    cout << arr[i] << " | "; 
    if ( min > arr[i] ) // Если min больше заданного после сортировки элемента массива...
    min = arr[i]; // Присваиваем min значение данного элемента
    if ( max < arr[i] ) // Аналогично для max
    max = arr[i];
}
Даже пример напишу. Допустим у нас массив из 3 элементов, 8, 3, 9. Сортируем - Элементы: 3, 8, 9.
Нам нужно найти минимальный. При первом проходе у нас min=8, Начинаем сравнивать. 8>3 -> min=3. Следущий цикл: 3>8, нет. 3>9 нет. Выходим из цикла
Скажите честно, ваш код или нашли исходник где-то на стороне и разбираетесь как работает?
S_el
2094 / 1601 / 307
Регистрация: 15.12.2013
Сообщений: 6,435
10.05.2014, 00:09 #13
Цитата Сообщение от web-magician Посмотреть сообщение
сложностей нет и для меня только вот хотелось понимать как это все работает в деталях???
У меня есть сложности с пониманием ваших мыслей.
Какие именно фрагменты кода объяснить подробнее?
web-magician
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
10.05.2014, 00:11  [ТС] #14
а если сортировки не было бы то соответственно программа не знала что такое min и что с ним делать?
S_el
2094 / 1601 / 307
Регистрация: 15.12.2013
Сообщений: 6,435
10.05.2014, 00:13 #15
Цитата Сообщение от Kuzia-22 Посмотреть сообщение
Скажите честно, ваш код или нашли исходник где-то на стороне и разбираетесь как работает?
А разве есть сомнения?

Добавлено через 59 секунд
Цитата Сообщение от web-magician Посмотреть сообщение
а если сортировки не было бы то соответственно программа не знала что такое min и что с ним делать?
Программа делает только то,на что она запрограммирована.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2014, 00:13
Привет! Вот еще темы с ответами:

Вывести значение и номер первого четного элемента массива или сообщение об его отсутствии - C (СИ)
ввести одномерный массив размерностью n. Вывести значение и номер первого четного элемента или сообщение об отсуствии четных значений

.NET 4.x Существует ли встроенный метод поиска элемента по двумерному массиву? - C#
int array; Существует ли встроенный метод поиска элемента по двумерному массиву?

После первого элемента массива, оканчивающегося на k, вставить ноль - Pascal ABC
Условие задачи: после первого элемента, оканчивающегося на k вставить ноль. Программа работает, но только если этот элемент не последний....

Все члены массива меньше первого элемента массива, увеличить на его значение. - Pascal ABC
1) В матрице a найти произведение положительных элементов во всех нечётных столбцах.Если таких элементов нет, то на печать выдать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.05.2014, 00:13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru