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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 23:49   #11
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Или выделяйте память динамически и возвращайте адрес (и размер неплохо бы), либо создавайте массив в main, а в функции передавайте на него указатель.
а можно поподробнее? что значит "выделяйте память динамически и возвращайте адрес (и размер неплохо бы)"? как это сделать?

а создавать массив в main я полагаю не подойдет к заданию, надо ведь чтобы ввод был в отдельной функции...
NewLamer&Programer вне форума Ответить с цитированием
Старый 20.01.2013, 00:02   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
#include <iostream>
#include <stdlib.h>
#include <locale>

using namespace std;

int*
input(int &count)
{
    cout << "how much numbers?" << endl;
    cin >> count;
    int *tmp = new int[count];
    for (int i = 0; i < count; ++i)
        tmp[i] = rand()%20;
    for (int i = 0; i < count; ++i)
        cout << tmp[i] << " ";
    cout << endl << endl;
    return tmp;
}

int main() {
    srand(time(NULL));
    int *mas = NULL;
    int n = 0;
    mas = input(n);
    for (int i = 0; i < n; ++i)
        cout << mas[i] << " ";
    delete[] mas;
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.01.2013 в 00:10.
BDA вне форума Ответить с цитированием
Старый 20.01.2013, 00:25   #13
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

нет нет пожалуйста только безо всяких using namespace std, cout, cin, >> и т.п. наш препод жутко не одобряет все это, поэтому я вообще не знаю что все это значит Да и кстати должно быть 4 функции обязательно, выше я выкладывал задание...
NewLamer&Programer вне форума Ответить с цитированием
Старый 20.01.2013, 00:48   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale>

int*
input(int &count)
{
    printf("how much numbers?\n");
    scanf("%d", &count);
    int *tmp = new int[count];
    for (int i = 0; i < count; ++i)
        tmp[i] = rand()%20;
    return tmp;
}

void
output(int *b, int n)
{
    for (int i = 0; i < n; ++i)
        printf("%d ", b[i]);
}

int
main(void) {
    srand(time(NULL));
    int *mas = NULL;
    int n = 0;
    mas = input(n);
    output(mas, n);
    delete[] mas;
    return 0;
}
Странный препод - не С++, а Си какой-то получается без cin и cout.

Я не говорил, что буду делать всю Вашу лабу
Я только привожу пример, как может выглядеть ввод массива, вынесенный в функцию (добавил и вывод).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.01.2013, 12:09   #15
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

BDA, преподов не выбирают :D

давайте с комментариями пожалуйсто, т.к. в С я почти 0
в частности интересуют строки:

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale>

int*
input(int &count)
{
    printf("how much numbers?\n");
    scanf("%d", &count); //не очень понятно как можно что то записать в переменную переданную в параметре...
    int *tmp = new int[count]; //что за new? где вы его объявили?
    for (int i = 0; i < count; ++i)
        tmp[i] = rand()%20;
    return tmp;
}

void
output(int *b, int n)
{
    for (int i = 0; i < n; ++i)
        printf("%d ", b[i]);
}

int
main(void) {
    srand(time(NULL));
    int *mas = NULL; //вообще не понятно что это значит...
    int n = 0; //почему 0? должно быть 20, да и как может быть массив из 0 элементов?
    mas = input(n);
    output(mas, n);
    delete[] mas; //это еще что? о_О
    return 0;
}
NewLamer&Programer вне форума Ответить с цитированием
Старый 20.01.2013, 13:12   #16
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

да кстати тут еще возник такой вопрос... бред конечно, но я сам не могу разобраться в своей 6 лабе :D не подскажете что значит pa++? в смысле на кой хрен оно там надо? делал давно уже не помню и никак вот не врублюсь...

исходный текст 6 лабы (по которой делается 8):
Код:
#include <stdio.h>
#include <conio.h>
#include <locale>
 
void main()
{
    setlocale(LC_ALL, "RUSSIAN");
	int a[20], s, i;
	int* pa;
	s = 0;
	srand(time(NULL));
	pa = &a[0];
	for(i=0; i<20;i++)
	{
		*pa = rand()%20;
		if (i % 2 == 0)
			s = s + *pa;
		else
			s = s - *pa;
		pa++;
	}
	printf("Знакопеременная сумма элементов массива = %d", s);
	getch();
}
NewLamer&Programer вне форума Ответить с цитированием
Старый 20.01.2013, 13:59   #17
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Вам срочно нужно подтянуть знания об указателях.
http://code-live.ru/post/cpp-pointers/ (обязательно к прочтению)
http://ru.wikipedia.org/wiki/Ссылка_(C++)
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale>

int*
input(int &count)
{
    printf("how much numbers?\n");
    scanf("%d", &count);//count - ссылка, поэтому фактически считывание происходит в n, которая объявлена в main (грубо говоря)
    int *tmp = new int[count];//выделение памяти под count элементов
    for (int i = 0; i < count; ++i)
        tmp[i] = rand()%20;
    return tmp;
}

void
output(int *b, int n)
{
    for (int i = 0; i < n; ++i)
        printf("%d ", b[i]);
}

int
main(void) {
    srand(time(NULL));
    int *mas = NULL;//указатель на int, который в данный момент ни на что не указывает
    int n = 0;//можно и не инициализировать, эта переменная изменится после вызова input
    mas = input(n);
    output(mas, n);
    delete[] mas;//освобождение памяти, выделенной new
    return 0;
}
Цитата:
в смысле на кой хрен оно там надо?
У Вас есть массив. pa - указатель на элемент массива. Сначала он указывает на 0 элемент. pa++ станет указывать на 1 элемент и т.д.

Все Ваши непонятки "растут" из непонимания темы указателей.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.01.2013, 15:35   #18
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

вот очередная попытка (спасибо, прочитал, познавательно...):

Код:
#include <stdio.h>
#include <conio.h>
#include <locale>
 

int* input(int &count)
{
	int *tmp = new int[count];
	for(int i = 0; i < count; ++i)
	{
		tmp[i] = rand()%20;
	}
return tmp;
}

void output(int *b, int n)
{
	for(int i = 0; i < n; ++i)
	{
		printf("Array[%d] = %d\n", i, b[i]);
	}
}

int process(int *c, int n)
{
	int s = 0;
	for(int i=0; i<n; i++)
	{
		if (i % 2 == 0)
		{
			s = s + c[i];
		}
		else
		{
			s = s - c[i];
		}
	}
return s;
}

void outputresults(int s)
{
    setlocale(LC_ALL, "RUSSIAN");
    printf("Знакопеременная сумма элементов массива = %d", s);
}

void main()
{
	srand(time(NULL));
	int n = 20;
	int s = 0;
	int *mas = NULL;
	mas = input(n);
	output(mas, n);
	s = process(mas, n);
	outputresults(s);
	delete[] mas;
	getch();
}
вроде бы все работает нормально, спасибо

Последний раз редактировалось NewLamer&Programer; 20.01.2013 в 15:42.
NewLamer&Programer вне форума Ответить с цитированием
Старый 20.01.2013, 16:59   #19
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Пожалуйста.
Да, теперь все хорошо.
Никаких ошибок не увидел.
Раз не изменяете в input count, то можно убрать ссылку, т.е. оставить только int* input(int count).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лаба по С++ Ansermark Общие вопросы C/C++ 2 02.10.2012 18:49
Лаба Lyalichka Помощь студентам 7 01.01.2011 23:16
Лаба на с++ lubafffka Фриланс 1 25.05.2010 22:24
Лаба на C++ Suzukava Фриланс 2 14.09.2009 22:51