Консультация № 175200
13.12.2009, 17:46
0.00 руб.
18.12.2009, 10:28
0 13 2
у меня плоховато с программированием по языку С ну очень надо решить эту задачку.
Имеются два одномерные массива значений произвольной размерности.
Найти для каждого из массивов сумму всех элементов и сравнить полученные значения.

Результат сравнения отобразить на экран.
оч нуждаюсь в этих задачках. надеюсь на вашу отзывчивость...

Обсуждение

давно
Профессор
230118
3054
13.12.2009, 19:56
общий
GrafMine:
1. В вопросе должна быть только одна задача.
2. Вопросы должны быть на русском языке.
Так положено Правилами портала. В случае соблюдения этих правил Вам помогут. И лучше ввести текст задачи, чтобы читатели рассылки могли его видеть.
Неизвестный
13.12.2009, 20:20
общий
Вот задачка какую надо решить, и она на русском ;)

Есть два одномерные массивы значений произвольной размерности.
Найти для каждого из массивов сумму всех элементов и сравнить полученные значения.
Результат сравнения отобразить на экран
давно
Старший Модератор
17042
808
18.12.2009, 11:15
общий
это ответ
Здравствуйте, GrafMine!
Решение задачи на "чистом" Си см. в приложении. Код комментирован.
Удачи!



Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//-----------------------------------------------------------------------
int main()
{
srand(time(NULL)); /*Инициализация генерации случайных чисел.*/

int iSize1, iSize2; /*Размерность массивов.*/
printf("Введите размер первого массива: ");
scanf("%i", &iSize1);
printf("Введите размер второго массива: ");
scanf("%i", &iSize2);

int iArray1[iSize1]; /*Первый массив.*/
int iArray2[iSize2]; /*Второй массив.*/

int i; /*Счётчик.*/
int iSum1 = 0; /*Сумма значений первого массива.*/
int iSum2 = 0; /*Сумма значений второго массива.*/

puts("");
puts("Генерируются значения первого массива...");
for(i = 0; i < iSize1; i++)
{
/*Заполняем элементы массива случайными числами и прибавляем к сумме.*/
iSum1 += (iArray1[i] = rand() % 1000 + 1);
printf("%i: %i\n", i, iArray1[i]);
}

puts("");
puts("Генерируются значения второго массива...");
for(i = 0; i < iSize2; i++)
{
/*Заполняем элементы массива случайными числами и прибавляем к сумме.*/
iSum2 += (iArray2[i] = rand() % 1000 + 1);
printf("%i: %i\n", i, iArray2[i]);
}

printf("Сумма значений первого массива равна %i\n", iSum1);
printf("Сумма значений второго массива равна %i\n", iSum2);
if(iSum1 > iSum2) puts("Сумма значений первого массива больше, чем второго.");
else if(iSum1 < iSum2) puts("Сумма значений второго массива больше, чем первого.");
else if(iSum1 == iSum2) puts("Суммы значений массивов равны.");
return 0;
}
5
спасибо =)
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
Неизвестный
20.12.2009, 02:02
общий
пишет след ошибки при компилировании:
ERROR 2.cpp 15: constant expression required
ERROR 2.cpp 16: constant expression required
ERROR 2.cpp 45: Function should return a value

помогите в чем проблема ?
давно
Профессор
230118
3054
20.12.2009, 02:31
общий
20.12.2009, 04:53
это ответ
Здравствуйте, GrafMine.

Тут чуть подправленная программа. Память под массивы выделяется динамически. Ошибка была в том, что нельзя описывать массивы размером, который заранее не известен.

Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//-----------------------------------------------------------------------
int main()
{
srand(time(NULL)); /*Инициализация генерации случайных чисел.*/

int iSize1=0, iSize2=0; /*Размерность массивов.*/
printf("Введите размер первого массива: ");
scanf("%i", &iSize1);
printf("Введите размер второго массива: ");
scanf("%i", &iSize2);

int* iArray1=(int*)malloc(sizeof(int)*iSize1);
int* iArray2=(int*)malloc(sizeof(int)*iSize2);/*Второй массив.*/

int i; /*Счётчик.*/
int iSum1 = 0; /*Сумма значений первого массива.*/
int iSum2 = 0; /*Сумма значений второго массива.*/

puts("");
puts("Генерируются значения первого массива...");
for(i = 0; i < iSize1; i++)
{
/*Заполняем элементы массива случайными числами и прибавляем к сумме.*/
iSum1 += (iArray1[i] = rand() % 1000 + 1);
printf("%i: %i\n", i, iArray1[i]);
}

puts("");
puts("Генерируются значения второго массива...");
for(i = 0; i < iSize2; i++)
{
/*Заполняем элементы массива случайными числами и прибавляем к сумме.*/
iSum2 += (iArray2[i] = rand() % 1000 + 1);
printf("%i: %i\n", i, iArray2[i]);
}

printf("Сумма значений первого массива равна %i\n", iSum1);
printf("Сумма значений второго массива равна %i\n", iSum2);
if(iSum1 > iSum2) puts("Сумма значений первого массива больше, чем второго.");
else if(iSum1 < iSum2) puts("Сумма значений второго массива больше, чем первого.");
else if(iSum1 == iSum2) puts("Суммы значений массивов равны.");
free(iArray1);
free(iArray2);
}
давно
Профессор
230118
3054
20.12.2009, 02:37
общий
GrafMine:
Если будет продолжать выдавать последнюю ошибку - или void main() или в конце добавьте return 0; Мой компилятор на это смотрит равнодушно, но у Вас какой-то очень строгий.
давно
Старший Модератор
17042
808
20.12.2009, 07:20
общий
GrafMine:
Цитата: 315496
пишет след ошибки при компилировании:


Вот потому я и пишу следующее в окне подачи вопроса:

Цитата: Информация от администратора рассылки
Если для Вас требуется создать приложение с использованием какого-то определённого набора инструментов, то указывайте его в вопросе (компилятор, интегрированная среда разработки, библиотека классов для построения графического интерфейса пользователя и т.п.). При этом не используйте русскую транслитерацию названия среды разработки / компилятора / библиотеки. Указывайте название программного продукта, с которым работаете, полностью с приведением номера его версии. Microsoft Visual C++ 6 и Microsoft Visual C++ 2008 Express Edition, Borland C++ 5.02 и Borland C++ Builder 6.0, Turbo C++ 3.1 и Turbo C++ 2006 Explorer - совсем не одно и то же. В случае если Вы этого не сделали и не ответили на уточняющие вопросы в мини-форуме, по умолчанию администратор рассылки будет считать, что Вы работаете с компилятором g++ из коллекции GCC 4.x в командной строке без использования IDE.


Вы не написали, с помощью каких инструментов будете компилировать программу, поэтому я, как и сказано выше, ориентировался на gcc. В компиляторе gcc всё работает нормально:



Однако некоторые компиляторы не допускают использования переменных для объявления массивов в программах на Си (о чём собственно Вам и сообщается). В этом случае, как и предлагает эксперт Ashotn, необходимо а) объявлять массивы в виде указателей и б) для их инициализации выделять память динамически с помощью malloc, исходя из размера int и значения переменной размерности. Изменённый код (тестирован на работоспособность в Borland C++ 5.02) приведён ниже:

Код:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//-----------------------------------------------------------------------
int iSize1, iSize2; /*Размерность массивов.*/
int* piArray1;
int* piArray2;
int i; /*Счётчик.*/
int iSum1 = 0; /*Сумма значений первого массива.*/
int iSum2 = 0; /*Сумма значений второго массива.*/
//-----------------------------------------------------------------------
int main()
{
srand((unsigned)time(NULL)); /*Инициализация генерации случайных чисел.*/

piArray1 = (int*)malloc(sizeof(int) * iSize1); /*Первый массив.*/
piArray2 = (int*)malloc(sizeof(int) * iSize2); /*Второй массив.*/

printf("Введите размер первого массива: ");
scanf("%i", &iSize1);
printf("Введите размер второго массива: ");
scanf("%i", &iSize2);

puts("");
puts("Генерируются значения первого массива...");
for(i = 0; i < iSize1; i++)
{
/*Заполняем элементы массива случайными числами и прибавляем к сумме.*/
iSum1 += (piArray1[i] = rand() % 1000 + 1);
printf("%i: %i\n", i, piArray1[i]);
}

puts("");
puts("Генерируются значения второго массива...");
for(i = 0; i < iSize2; i++)
{
/*Заполняем элементы массива случайными числами и прибавляем к сумме.*/
iSum2 += (piArray2[i] = rand() % 1000 + 1);
printf("%i: %i\n", i, piArray2[i]);
}

printf("Сумма значений первого массива равна %i\n", iSum1);
printf("Сумма значений второго массива равна %i\n", iSum2);
if(iSum1 > iSum2) puts("Сумма значений первого массива больше, чем второго.");
else if(iSum1 < iSum2) puts("Сумма значений второго массива больше, чем первого.");
else if(iSum1 == iSum2) puts("Суммы значений массивов равны.");

free(piArray1); /* Не забываем высвобождать выделенную память. */
free(piArray2);

return 0;
}
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Старший Модератор
17042
808
20.12.2009, 07:24
общий
Ashotn:
Вы свою версию ответа в чём компилировали? В том виде, в котором Вы подали код ответа, в Borland C++ выдаёт ошибки (хотя в gcc будет компилироваться без проблем).
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Профессор
230118
3054
20.12.2009, 10:37
общий
Dr_Andrew:
В VS 2005.
давно
Старший Модератор
17042
808
20.12.2009, 11:42
общий
Ashotn:
Ясно, спасибо.


Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Старший Модератор
17042
808
20.12.2009, 11:43
общий
GrafMine:
Ну что ж, теперь у Вас есть три варианта кода, один уж точно подойдёт...
Об авторе:
We have but faith: we cannot know;
For knowledge is of things we see;
And yet we trust it comes from thee,
A beam in darkness: let it grow.
-----
https://www.linkedin.com/in/andreynkuznetsov
https://www.researchgate.net/profile/Andrey_Kuznetsov11
http://www.researcherid.com/rid/K-8824-2014
давно
Профессор
230118
3054
20.12.2009, 11:56
общий
Dr_Andrew:
Ошибка в моем ответе значила "ошибка компилятора". И если код компилируется в gcc, как Вы написали, он правильный.
давно
Мастер-Эксперт
680
2811
20.12.2009, 12:23
общий
Ashotn:
Будьте четче в формулировках - подобные "нечеткости" простительны для посетителей, но не экспертов.
Форма ответа