-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
1

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

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

Author24 — интернет-сервис помощи студентам
Свем доброго времени суток и всех с праздником!
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]; и почему нельзя просто присвоить "нуль" без массива (что будет) и объясните пожалуйста поточнее ибо понимаю все не сразу...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2014, 23:16
Ответы с готовыми решениями:

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

Создать программу для поиска первого нечетного элемента в заданном массиве методом бинарного поиска
Бинарный поиск Первый нечетный, помогите пожалуйста.

Поиска заданного числа, количества его вхождений в массив и номер первого элемента
составить программу поиска заданного числа, количества его вхождений в массив и номер первого...

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

33
10 / 9 / 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;
}
1
-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 как это сделать?
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
09.05.2014, 23:47 4
Kuzia-22, фигурные скобки нужны чтобы объединить несколько смысловых строчек в блок.Для простого вывода они не требуются.
Хотя я их предпочитаю ставить,вдруг потом понадобится еще какой-то оператор в цикл впихнуть
1
-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;
}
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
09.05.2014, 23:49 6
Цитата Сообщение от web-magician Посмотреть сообщение
я захочу вывести индекс элемента массива ну к примеру ввожу 4 а он выводит элемент массива 3 как это сделать?
Обращайся поэлементно,при совпадении выводи.
0
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
09.05.2014, 23:56  [ТС] 7
Цитата Сообщение от S_el Посмотреть сообщение
Обращайся поэлементно,при совпадении выводи.
то есть
C++
1
if (1) cout << arr[0];
примерно так? тогда он будет выводить все значения которые последуют за ними (потому что if-ов будет 10 штук ровно) и код получится длинным и нудным... а по другому никак? индекс элемента массива нужен.
0
10 / 9 / 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-ов используй фигурные скобки
Меня вот учили подругому "Пиши коментарии или код, который можно будет прочесть при минимальном количестве коментариев". С тех пор для удобочитаемости ставлю скобки даже для одиночных операций

0
-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] )
как понять этот момент?
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2014, 00:05 10
web-magician, что-то я вас плохо понимаю,что конкретно вас интересует?Обдумайте каждый шаг кода,там нет никаких синтаксических сложностей.
0
-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, что-то я вас плохо понимаю,что конкретно вас интересует?Обдумайте каждый шаг кода,там нет никаких синтаксических сложностей.
сложностей нет и для меня только вот хотелось понимать как это все работает в деталях???
0
10 / 9 / 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 нет. Выходим из цикла
Скажите честно, ваш код или нашли исходник где-то на стороне и разбираетесь как работает?
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2014, 00:09 13
Цитата Сообщение от web-magician Посмотреть сообщение
сложностей нет и для меня только вот хотелось понимать как это все работает в деталях???
У меня есть сложности с пониманием ваших мыслей.
Какие именно фрагменты кода объяснить подробнее?
0
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
10.05.2014, 00:11  [ТС] 14
а если сортировки не было бы то соответственно программа не знала что такое min и что с ним делать?
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2014, 00:13 15
Цитата Сообщение от Kuzia-22 Посмотреть сообщение
Скажите честно, ваш код или нашли исходник где-то на стороне и разбираетесь как работает?
А разве есть сомнения?

Добавлено через 59 секунд
Цитата Сообщение от web-magician Посмотреть сообщение
а если сортировки не было бы то соответственно программа не знала что такое min и что с ним делать?
Программа делает только то,на что она запрограммирована.
0
10 / 9 / 2
Регистрация: 21.11.2013
Сообщений: 50
10.05.2014, 00:14 16
web-magician, программа "знала". Только min был отнюдь не минимальным значением, просто первым. По своему опыту скажу, нет смысла работать с несортированным массивом. И 90% задач с массивами, ну по крайней мере на время обучения в ВУЗе, начинается именно с их сортировки. IMHO, вам бы почитать чего-нибудь по теме...
Это я вам как студент говорю (:
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
10.05.2014, 00:15 17
Цитата Сообщение от web-magician Посмотреть сообщение
массив 0.1.2.3.4.5.6.7.8.9 ввожу 1 система выводит 0 первый элемент массива
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0;i<N;i++)
 {
   if(a==arr[i])
     {
       if(i==0)
        cout<<"Error"
      else
       cout<<arr[i-1];
     }
}
N количество элементов( размер массива)
a веденое число
arr массив
0
-6 / 11 / 1
Регистрация: 11.02.2011
Сообщений: 227
10.05.2014, 00:17  [ТС] 18
Цитата Сообщение от Kuzia-22 Посмотреть сообщение
Скажите честно, ваш код или нашли исходник где-то на стороне и разбираетесь как работает?
если честно то нет не нашел, а писал сам и это было уже давно и я только учусь и тогда только учился и перестал заниматься в одно время вообще вот сейчас решил взяться снова и понял,что подзабыл многое так как время от времени читал книгу, а в ней все с самого начала и много подробностей и новшеств которых я не видел... и сейчас видимо подзабыл или запутался после всей информации полученной из книги...
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,516
10.05.2014, 00:17 19
или ты вводишь индекс?
тогда так
C++
1
cout<<arr[a-1];
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,237
10.05.2014, 00:19 20
Цитата Сообщение от Kuzia-22 Посмотреть сообщение
И 90% задач с массивами, ну по крайней мере на время обучения в ВУЗе, начинается именно с их сортировки.
Массив это способ хранения данных и только малая часть задач сводится к их упорядочиванию.
0
10.05.2014, 00:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2014, 00:19
Помогаю со студенческими работами здесь

Почему не значение из переменой не берется из формы 2 в форму 3
public partial class Form2 : Form { public string text=&quot;smth&quot;; } public...

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

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

Вывести значение и номер первого четного элемента массива или сообщение об его отсутствии
ввести одномерный массив размерностью n. Вывести значение и номер первого четного элемента или...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru