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

Не могу понять как работает программа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не сравниваются строки http://www.cyberforum.ru/cpp-beginners/thread780417.html
Сегодня мне понадобилось вызвать программу с аргументом команднйо строки я посмотрел пример на http://www.cplusplus.com/forum/beginner/35344/ и попробовал написать так же: #pragma once #include "stdafx.h" #include "binder.h" #include "logger.h" #include <string>
C++ Указатели и динамические массивы. Использование указателей в качестве аргументов функций Из целочисленного массива Х(N) все нечетные элементы записать в массив Y(k). Удалить из каждого массива все простые двузначные числа. Найти, как изменилось количество простых чисел в каждом массиве после удаления. В программе написать функции: формирования массива Y, удаления элемента, определения количества простых чисел в массиве. Если можно, то напишите комментарии к строкам (что данная... http://www.cyberforum.ru/cpp-beginners/thread780398.html
C++ Ошибка: нарушение прав доступа при чтении
Помогите решить ошибку, если отдельно вызывать функции double det(macierz *A,macierz*B,int u) void kramer(macierz A,macierz *B) в мейне, то все прекрасно работает, как только задействую цыкл for выскакивает ошибка. Скрин прилагаеться #include <iostream> #include <math.h> #include <vector>
C++ Конструктор и деструктор
На сколько сильно они нужны и можно ли обойтись без них? Что будет если их не описывать? Что такое утечки памяти? Память забивается только на время выполнения программы или дольше?
C++ Не работают функции inport и outport http://www.cyberforum.ru/cpp-beginners/thread780338.html
Всем здравствуйте. Пишу код который должен будет выполняться под 16-битной DOS. Пишу его в Borland C++ 5.02. Подключаю "dos.h" в котором задефайнены функции inport и outport. При компиляции происходит ошибка "Error:Call to undefined function 'outport' " (тоже самое с inport). В хедере dos.h само собой нет описания этих функций, только определения, но какую тогда библиотеку требуется подключить?
C++ Используя только элементарные арифметические операции, определить сумму и произведение членов последовательности, которые кратны К Ув.пользователи, помогите решить задачку (С + + или Visual C + +). Данные целые положительные числа N, К, a1, ..., aN. Используя только элементарные арифметические операции (+, -, *, /), определить сумму и произведение членов последовательности a1, ..., aN, которые кратны К. Массивы не использовать. Заранее благодарен! подробнее

Показать сообщение отдельно
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
06.02.2013, 21:36     Не могу понять как работает программа
Цитата Сообщение от VD17 Посмотреть сообщение
А зачем выполнять for (int i = 0; i < sizeOfArray; i++), в каждой функции ведь это уже сделано в функцие main() , это что то типа повтора итерации или как?
должно быть вы не поняли тему массивов и тему циклов... а я тут с вам о каких-то инвариантах цикла рассуждаю )))

смотрите... массив состоит из набора элементов, в вашем случае он определён как
C++
1
int inputValues[128];
эта строчка означает следующее - выделить память достаточную, чтобы хранить 128 элементов типа int, тип int - это по соглашению С++ целые числа (как отрицательные так и положительные), размер памяти для одного элемента int - зависит от конкретной среды С++, в обычных компьютерах на современных С++ средах обычно это 4 байта, соответственно эта строка означает зарезервировать 4*128 байт в памяти и вернуть указатель на начало этой области в переменную inputValues... все... т.е. по адресу inputValues[0] хранится первый элемент, по InputValues[1] - второй и т.д. до inputValuse[127]

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

далее...

sizeOfArray - это, подчеркну!!!, количество РЕАЛЬНО забитых элементов... т.е. явно предполагается не все 128 забьёте

а теперь переходим к вашему вопросу

C++
1
 for (int i = 0; i < sizeOfArray; i++)
для этого разберём что это значит...
здесь через int i = 0 содаётся временная локальная переменная под именем i, в которую передаётся значение 0, сразу после выполнения цикла переменная i будет уничтожена, и больше к ней не обратиться... вообще... далее на каждой итерации цикла i прибавляется на единицу, до тех пор пока i не будет равно sizeOfArray (что это такое, написал выше)
это относительно этой строки

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

в первом случае :
C++
1
2
3
4
5
6
for (int i = 0; i < sizeOfArray; i++)
    {
         cout.width(3);
          cout  << i << ": " << integerArray[i] << endl;
     }
     cout << endl;
выполняется действие (cout << i << ": " << integerArray[i] << endl, которое выводит поэлементно все элементы в консоль

во втором случае
C++
1
accumulator += integerArray[i];
находится сумма всех элементов (так же поэлементно обходится массив и каждый элемент суммируется в accumulator, i после цикла, каждый раз разрушается, напоминаю...

теперь поглядим на ваш вопрос
C++
1
couth << sizeOfArray " : " <<  integerArray[i] << endl;
во первых не couth а cout

но не суть)
эта строчка означает одно -
послать в поток вывода КОЛИЧЕСТВО ЭЛЕМЕНТОВ (sizeOfArray), затем знак :, затем ОДИН элемент этого массива с несуществующим индексом (i в этом контексте не существует), сбросить буфер, вывести всё в консоль, перевести строчку

и зачем это надо?
 
Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru