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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2013, 20:54   #1
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию Одномерный массив. есть код, нужно объяснить и немного подправить

вот для этого задания: Написать программу построения массива с элементами a1, a1 + a2, a1 + a2 + a3, ..., a1 + a2 + ... + an по данным элементов исходного массива а1, а2, ..., ап.

у меня написана, все работает:

Код:
#include <iostream>
#include <string>
void func(int *, int);
using namespace std;


void main()
{
	int n;
	cout<<"Vvedi k-vo: ";
	cin>>n;
	int *arr=new int[n];
	
	for (int i = 0; i < n; i++) 
	
{
        cout << "[" << i + 1 << "]" << ": ";
        cin >> arr[i];
	}
	func(arr, n);
		
	system("PAUSE");
	delete[]arr;
}
void func(int *arr, int n)
{
	for (int i = 0, tSum = arr[i]; i < n; i++, tSum += arr[i])
	arr[i] = tSum;
	cout << endl;
	cout<<"your result: \n";
	
for (int i = 0; i < n; i++) 
	cout << arr[i] << ' '; 
	cout << endl;
}
первое, это нужно повыделять функции, тоесть для циклов и тд.
второе, это объяснить как работает функция :
Код:
void func(int *arr, int n)
{
	for (int i = 0, tSum = arr[i]; i < n; i++, tSum += arr[i])
	arr[i] = tSum;
	cout << endl;
	cout<<"your result: \n";
	
for (int i = 0; i < n; i++) 
	cout << arr[i] << ' '; 
	cout << endl;
}
mikeel вне форума Ответить с цитированием
Старый 10.06.2013, 21:18   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код:
void func(int *arr, int n) // В функцию получает указатель на массив и его размер
{
	for (int i = 0, tSum = arr[i]; i < n; i++, tSum += arr[i]) // Заполняется массив
	arr[i] = tSum; // При каждой итерации в ячейку массива с индексом i 
	cout << endl; // помещается значение суммы всех предыдущих ячеек
	cout<<"your result: \n";
	
for (int i = 0; i < n; i++)  // Печать получившегося массива
	cout << arr[i] << ' '; 
	cout << endl;
}
Все....

Кстати нет смысла использовать
Код:
#include <string>
В коде не используются функции для работы со строками
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 10.06.2013, 21:20   #3
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Код:
void func(int *arr, int n) // В функцию получает указатель на массив и его размер
{
	for (int i = 0, tSum = arr[i]; i < n; i++, tSum += arr[i]) // Заполняется массив
	arr[i] = tSum; // При каждой итерации в ячейку массива с индексом i 
	cout << endl; // помещается значение суммы всех предыдущих ячеек
	cout<<"your result: \n";
	
for (int i = 0; i < n; i++)  // Печать получившегося массива
	cout << arr[i] << ' '; 
	cout << endl;
}
Все....

Кстати нет смысла использовать
Код:
#include <string>
В коде не используются функции для работы со строками
большое спасибо, а можно по-подробней объяснить как работает эта строка?
Код:
for (int i = 0, tSum = arr[i]; i < n; i++, tSum += arr[i]) // Заполняется массив
mikeel вне форума Ответить с цитированием
Старый 10.06.2013, 21:31   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Можно...
В начале выполнения цикла переменная i получает значение 0, а переменная tSum значение хранящееся в ячейке массива arr[0], т.е. первое число в массиве. Проверяется условие i < n, если условие true, то в ячейку arr[0] помещается значение из tSum (arr[i] = tSum;). счетчик i увеличивается на 1, а значение хранящееся в tSum увеличивается на значение в ячейке arr[1] (т.е. число из arr[0]+ число из arr[1]). tSum получает новое значение суммы 2-х элементов. В ячейку arr[1] помещается значение из tSum. И так далее. tSum используется как аккумулятор для хранения сумм, результат которых помещается в ячейки массива... Не забываем, что цикл выполняется пока верно условие i < n.
Надеюсь не слишком запутанно....????
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!

Последний раз редактировалось Bugrimov; 10.06.2013 в 21:34.
Bugrimov вне форума Ответить с цитированием
Старый 10.06.2013, 21:36   #5
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Можно...
В начале выполнения цикла переменная i получает значение 0, а переменная tSum значение хранящееся в ячейке массива arr[0], т.е. первое число в массиве. Проверяется условие i < n, если условие true, то в ячейку arr[0] помещается значение из tSum (arr[i] = tSum;). счетчик i увеличивается на 1, а значение хранящееся в tSum увеличивается на значение в ячейке arr[1] (т.е. число из arr[0]+ число из arr[1]). tSum получает новое значение суммы 2-х элементов. В ячейку arr[1] помещается значение из tSum. И так далее. tSum используется как аккумулятор для хранения сумм, результат которых помещается в ячейки массива... Не забываем, что цикл выполняется пока верно условие i < n.
Надеюсь не слишком запутанно....????
нет ,все отлично) все ясно, смогу объяснить) спасибо)
а можете загнать в отдельную функцию цекл, который в мэйне? а то голова сейчас кипит в других лабах
mikeel вне форума Ответить с цитированием
Старый 10.06.2013, 21:48   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код:
arr = AddArr(arr, n);
.....
.....
int *AddArr(int *arr, int n)
{
for (int i = 0; i < n; i++) 
	
{
        cout << "[" << i + 1 << "]" << ": ";
        cin >> arr[i];
	}
return arr;
}
Попробуйте что-нибудь в этом духе....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 10.06.2013, 21:59   #7
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Код:
arr = AddArr(arr, n);
.....
.....
int *AddArr(int *arr, int n)
{
for (int i = 0; i < n; i++) 
	
{
        cout << "[" << i + 1 << "]" << ": ";
        cin >> arr[i];
	}
return arr;
}
Попробуйте что-нибудь в этом духе....
получается вот так:
Код:
#include <iostream>
#include <string>
void func(int *, int);

using namespace std;


void main()
{
	int n;
		cout<<"Vvedi k-vo: ";
	cin>>n;
	
	int *arr=new int[n];
	
	// Заполняем массив с клавиатуры
	arr = AddArr(arr, n);
	delete[]arr;
	system("PAUSE");
	
}
	int *AddArr(int *arr, int n)

{
for (int i = 0; i < n; i++) 
	
	{
        cout << "[" << i + 1 << "]" << ": ";
        cin >> arr[i];
	}
return arr;
}


void func(int *arr, int n)
{
	for (int i = 0, tSum = arr[i]; i < n; i++, tSum += arr[i])
			arr[i] = tSum;
	cout << endl;
	cout<<"your result: \n";
	for (int i = 0; i < n; i++) 
				
		cout << arr[i] << ' '; 
	cout << endl;
	
	}
но выбивает ошибку:
Ошибка 1 error C3861: AddArr: идентификатор не найден j:\8massive\8\8.cpp 17
mikeel вне форума Ответить с цитированием
Старый 10.06.2013, 22:08   #8
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код:
#include <iostream>

void func(int *, int);
int *AddArr(int *, int);

using namespace std;
Необходимо прописать прототип функции...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 10.06.2013, 22:10   #9
mikeel
Пользователь
 
Регистрация: 18.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Код:
#include <iostream>

void func(int *, int);
int *AddArr(int *, int);

using namespace std;
Необходимо прописать прототип функции...
естественно, забыл, огромнейшее спасибо) выручили)
даже нелвоко еще что-то просить, но ситуация вынуждает:
http://www.programmersforum.ru/showt...=1#post1242769
mikeel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal ABC буду благодарна в объяснении кода задачи(код есть нужно объяснить ее) Maliish Помощь студентам 0 03.03.2012 00:38
Нужно немного подправить программу на работу с двумерной матрицей(C++ Builder6)) Kroleg Помощь студентам 1 09.10.2011 04:49
Нужно подправить код zeppelin58 Общие вопросы C/C++ 1 28.05.2010 12:11
Помогите с РГР на Си(есть коды, нужно подправить) Darh Помощь студентам 1 27.12.2009 21:16