Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Приветствую, есть проблема


Автор: SIMarOK 25.10.2004, 22:31
Мне задали сделать лабу по массивам в С++, лабораторная очень простая по своеё сути, вот условие:
В массиве, содержащем не более 21 числа, подсчитать среднее арифметическое для положительных элементов. Если среднее больше заданного числа, положительные элементы исходного массива уменьшить на это число, а отрицательные - увеличить. Найти максимальный элемент полученного массива и его номер. Формат числа ±цц.ц. Результаты распечатать в виде:



Исходный массив: ……………………………………………………

Заданное число …….……..

Среднее для положительных элементов ……..

Полученный массив ……………………………………………………

Номер максимума ….


помогите плиз кто знает...в долгу не останусь:)

Пасиб:)

Автор: Step 26.10.2004, 09:03
Модератор: Название темы должно отражать ее суть!

Автор: Vaulter 26.10.2004, 12:28
SIMarOK
Цитата
помогите плиз кто знает..

чем помочь то?программу написать? за это деньги берут ;)

Автор: SIMarOK 26.10.2004, 15:43
Цитата(Step @ 26.10.2004, 09:03)
Модератор: Название темы должно отражать ее суть!

Сорри, не знал...исправлюсь :)
Добавлено @ 15:44
Цитата(Vaulter @ 26.10.2004, 12:28)
SIMarOK
Цитата
помогите плиз кто знает..

чем помочь то?программу написать? за это деньги берут ;)

Сколькож это стоить будет?
Это ведь даже не программа...а просто алгоритм для детей:), там ничего сложного...
Добавлено @ 15:45
помоголиб бедному студенту первого курса:(. Добрые дяденьки и тётеньки:)

Автор: Step 26.10.2004, 16:02
модуль расчета
Код

float mas[21];
//произвести заполнение
//ввести граничное число в переменную G
float sum=0;
int kol=0;
float sr;
for (int i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++}
}
sr=sum/kol;

if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
}
}
float max=mas[0];
kol=0;
for (int i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}
}


Добавлено @ 16:09
тут можно еще долго извращаться над моим кодом, оптимизировать его... избовляться от лишних циклов, но думаю вам это не нужно

Автор: SIMarOK 26.10.2004, 16:15
Сейчас попробую разобраться, спасибо за помощь:)

Автор: Step 26.10.2004, 16:23
Цитата(SIMarOK @ 26.10.2004, 16:15)

Сейчас попробую разобраться, спасибо за помощь

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

Автор: SIMarOK 26.10.2004, 16:34
Вот что я пока дополнил, теперь осталось сделать вывод результатов с очисткой экрана:)
Код
# include <stdio.h>
# include <conio.h>
void main ()
{ float g;
float mas[21];
for ( int i=0; i<21; i++)
{
printf("Vvedite massiv\n mas[%d]=", i);
scanf("%d", &mas[i]);
}
while(1)
{
printf("Vvedite 4islo\ng=", g);
scanf("%f", &g); break;
}
float sum=0;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;

if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
}
}
float max=mas[0];
kol=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}
}
getch();
}



Автор: SIMarOK 26.10.2004, 17:19
Вот посмотрите пожалуйста, почему то он выводит sr равное нулю, хотя поидее оно должно быть не нулем, где то ошибка...И номер максимума пишет тоже 0. И как сделать так чтобы он напечатал все значении массивов в строчку?
Код

# include <stdio.h>
# include <conio.h>
void main ()
{ float g;
float mas[21];
for ( int i=0; i<21; i++)
{
printf("Vvedite massiv\n mas[%d]=", i);
scanf("%d", &mas[i]);
}

printf("Vvedite 4islo\ng=", g);
scanf("%f", &g);


float sum;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;

if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
}
}
float max=mas[0];
kol=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}
clrscr();
printf("\nZagadannoe chislo g=%2.1f", g);
printf("\nSrednee dlia polojitelnix elementov: sr=%d", sr);
printf("\nPoluchenniy massiv mas[i]=%d", mas[i]);
printf("\nNomer maksimuma: max=%d", max);
getch();
}
}


Автор: Step 26.10.2004, 17:31
каретку переводить не надо...

как ты сейчас выводишь... код покажи

Автор: SIMarOK 26.10.2004, 17:39
Вот
Код
# include <stdio.h>
# include <conio.h>
void main ()
{ float g;
float mas[21];
for ( int i=0; i<21; i++)
{
printf("Vvedite massiv\n mas[%d]=", i);
scanf("%d", &mas[i]);
}

printf("Vvedite 4islo\ng=", g);
scanf("%f", &g);


float sum;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;

if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
}
}
float max=mas[0];
kol=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}
clrscr();
printf("Isxodniy massiv: ");
for (i=0; i<21; i++)
{
printf("mas[%d]=%d  ", i, mas[i]);//вот я попытася напечатать массив, но не вышло...значении массивов он не пишет
}
printf("\nZagadannoe chislo g=%2.1f", g);
printf("\nSrednee dlia polojitelnix elementov: sr=%d", sr);
printf("\nPoluchenniy massiv mas[i]=%d", mas[i]);
printf("\nNomer maksimuma: max=%d", max);
getch();
}
}

Автор: Step 26.10.2004, 17:52
float sum;
заменить
float sum=0;
внимательнее надо быть :)

а он и должен значения массива у тебя в строку гнать


for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
} - вот тут нехватает еще фигурной скобки.... а в конце проги убрать одну надо
clrscr();


блин да у тебя наверное хаос при выводе творился
Добавлено @ 17:57
и ноль у тебя потомучто scanf("%d", &mas[i]);

а нужно scanf("%f", &mas[i]);

Автор: SIMarOK 26.10.2004, 18:03
Вот когда я изменил фигурные скобки на местах. по твоим указаниям, ничего не изменилось:)

Что насчет значений...он всеровно почему то везде по нулям выводит...вот:
http://simarok.narod.ru/shard.JPG

Автор: Step 26.10.2004, 18:05
и еще одна ошибка
printf("mas[%d]=%.02f ", i, mas[i]);

Автор: SIMarOK 26.10.2004, 18:09
Цитата(Step @ 26.10.2004, 18:05)
и еще одна ошибка
printf("mas[%d]=%.02f  ", i, mas[i]);

Во, теперь выводит, спасибо:)

Автор: Step 26.10.2004, 18:19
вообщем рабочий код
Код
 float g;
float mas[21];
for ( int i=0; i<21; i++)
{
printf("Vvedite massiv\n mas[%d]=", i);
scanf("%f", &mas[i]);
}

printf("Vvedite 4islo\ng=", g);
scanf("%f", &g);


float sum=0;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;

if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
}
}
float max=mas[0];
kol=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}}

printf("Isxodniy massiv: ");
for (i=0; i<21; i++)
{
printf("mas[%d]=%.02f  ", i, mas[i]);
}
printf("\nZagadannoe chislo g=%2.1f", g);
printf("\nSrednee dlia polojitelnix elementov: sr=%f", sr);
printf("\nPoluchenniy massiv mas[i]=%f", mas[i]);
printf("\nNomer maksimuma: max=%f", max);


Автор: SIMarOK 26.10.2004, 18:20
Но вот нашел еще одну проблему: он когда выводит массив, то пишет уменьшенные числа на загаданное число...т.е. как то надо сделать чтоб он выводил исходные....

Автор: Step 26.10.2004, 18:23
все правельно

вставь вот это printf("Isxodniy massiv: ");
for (i=0; i<21; i++)
{
printf("mas[%d]=%.02f ", i, mas[i]);
}

еще и сразу после этого

printf("Vvedite 4islo\ng=", g);
scanf("%f", &g);

и очистку экрана не забудь перенисти

Автор: SIMarOK 26.10.2004, 18:49
Всё, большое спасибо тебе Step, помог новичку:)
Вот собственно что получилось в итоге:)
Код
# include <stdio.h>
# include <conio.h>
void main ()
{ float g;
float mas[21];
for ( int i=0; i<21; i++)
{
printf("Vvedite massiv\n mas[%d]=", i);
scanf("%f", &mas[i]);
}


printf("Vvedite 4islo\n g=", g);
scanf("%f", &g);
clrscr();
printf("Isxodniy massiv: ");
for (i=0; i<21; i++)
{
printf("mas[%d]=%.02f ", i, mas[i]);
}
printf("\nZagadannoe chislo g=%2.1f", g);

float sum=0;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;
printf("\nSrednee dlia polojitelnix elementov: sr=%.02f", sr);
printf("\nPoluchenniy massiv:");
if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
printf("mas[%d]=%.02f ", i, mas[i]);
}
}
float max=mas[0];
kol=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}
}
printf("\nNomer maksimuma:mas[%d]=%.02f", i, max);
getch();
}

Автор: SIMarOK 27.10.2004, 19:42
А можно ли этот как-то представить ввиде функций?

Автор: Step 28.10.2004, 11:00
можно, что именно
Добавлено @ 11:04
можно все, можно по частям, с целью повторного использования...

да можно все что угодно творить, главное цель какая

Автор: SIMarOK 28.10.2004, 16:24
Нужно представить этот код с функциями...вот типо плана:
float mas[21]
Do
ввод пользователем i
while
1<i<=21
Функции:
1) Ввод массива
2) Вывод
3) Нахождение sr
4) преобразование массива
А распечатка результатов, в виде заданном в условии, в самом низу

Автор: Step 28.10.2004, 16:30
дам пример одной функции, а там ковыряй дальше уже сам...
Код

# include <stdio.h>
# include <conio.h>
void inputmasiv(int n){ //функция вводит н элементов массива н не должно быть больше 21 т.к. длина масива 21 элемент
for ( int i=0; i<n; i++)
{
printf("Vvedite massiv\n mas[%d]=", i);
scanf("%f", &mas[i]);
}
}
void main ()
{ float g;
float mas[21];

inputmasiv(21); //вызываем функцию и передаем ей сколько элементов хотим ввести

printf("Vvedite 4islo\n g=", g);
scanf("%f", &g);
clrscr();
printf("Isxodniy massiv: ");
for (i=0; i<21; i++)
{
printf("mas[%d]=%.02f ", i, mas[i]);
}
printf("\nZagadannoe chislo g=%2.1f", g);

float sum=0;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;
printf("\nSrednee dlia polojitelnix elementov: sr=%.02f", sr);
printf("\nPoluchenniy massiv:");
if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
printf("mas[%d]=%.02f ", i, mas[i]);
}
}
float max=mas[0];
kol=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
kol=i;
}
}
printf("\nNomer maksimuma:mas[%d]=%.02f", i, max);
getch();
}

Автор: SIMarOK 2.11.2004, 21:30
Код

# include <stdio.h>
# include <conio.h>
void massivShnik(int k)
{  int i;
float mas[21];
i=0;
printf("Vvedite massiv\n");
do
{
i++;
printf("mas[%d]=", i);
scanf("%f", &mas[i]);
}
while (i<k);
}
void main ()
{float g;
float mas[21];
int i;
massivShnik(21);
printf("Vvedite 4islo\n g=", g);
scanf("%f", &g);
clrscr();
printf("Isxodniy massiv: ");
for (i=0; i<21; i++)
{
printf("mas[%d]=%.02f ", i, mas[i]);
}
printf("\nZagadannoe chislo %2.1f", g);

float sum=0;
int kol=0;
float sr;
for ( i=0;i<21;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;
printf("\nSrednee dlia polojitelnix elementov: %.02f", sr);
printf("\nPoluchenniy massiv:");
if (sr>g){
for (int i=0;i<21;i++){
if (mas[i]>0) mas[i]-=g;
else if (mas[i]!=0) mas[i]+=g;
printf("mas[%d]=%.02f ", i, mas[i]);
}
}
float max=mas[0];
int ss=0;
for (i=0;i<21;i++){
if (mas[i]>max){
max=mas[i];
ss=i;
}
}
printf("\nNomer maksimuma:mas[%d]=%.02f", ss, max);
getch();
}



В чем здесь ошибка?
После заполнения массива он выводит ошибку "что вызвал общую ошибку защиты вмодуле ....exe в 0001:01А6

Автор: Step 3.11.2004, 10:45
Цитата(SIMarOK @ 2.11.2004, 21:30)

void massivShnik(int k)
{  int i;
float mas[21];
i=0;
printf("Vvedite massiv\n");
do
{
i++;
printf("mas[%d]=", i);
scanf("%f", &mas[i]);
}
while (i<k);
}

поставь в конце
эту функцию в начале оставь только вот такую строчку
void massivShnik(int k);


и удали из функции вот эту строчку float mas[21];

Автор: SIMarOK 3.11.2004, 18:59
Цитата(Step @ 3.11.2004, 10:45)
Цитата(SIMarOK @ 2.11.2004, 21:30)

void massivShnik(int k)
{  int i;
float mas[21];
i=0;
printf("Vvedite massiv\n");
do
{
i++;
printf("mas[%d]=", i);
scanf("%f", &mas[i]);
}
while (i<k);
}

поставь в конце
эту функцию в начале оставь только вот такую строчку
void massivShnik(int k);


и удали из функции вот эту строчку float mas[21];

Ошибка всеровно выскакивает...а если убрать float mas[21]; то вообще в компиле выявляет ошибку об не объявленной переменной

Автор: SIMarOK 21.11.2004, 15:26
Помогите плиз ктонибудь переделать эту программу тоже с функциями...ну никак не выходит...я пробывал делать, но у меня распечатка не работает...
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)