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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2010, 16:15   #1
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
Вопрос турбо Си. одномерный массив

не могу найти ошибку в программе:
условие(В одномерном массиве, состоящем из n вещественных элементов, вчислить:
1) сумму отрицательных элементов;
2)произведение элементов массива, расположенных между максимальными минимальным элементами.
упорядочить элементы массива.
)
Код:
#include<stdio.h>
#define Nmax 100
main()
{ int i,n,imax,imin,j;
  float A[Nmax],y,S=0,P=1,max,min;
  printf("\n введите количество элементов:");
  scanf("%d",&n);
  printf("\nвведите элементы:");
  for(i=0;i<n;i++)
    {scanf("%f",&A[i]);
     if (A[i]<0)
     S=S+A[i];
    }
    printf("\nсумма отрицательных элементов равна =%f",S);
  imin=0;
  imax=0;
  max=A[0];
  min=A[0];
  for(i=1;i<n;i++)
    {if (A[i]>max)
    {  max=A[i];
       imax=i;
    }
    if (A[i]<=min)
    {  min=A[i];
       imin=i;
    } }
  if (imax>imin)
  for(i=imin+1;i<imax;i++)
  P=P*A[i];
  else
  for(i=imax+1;i<imin;i++)
  P=P*A[i];
  printf("\n произведение элементов=%f",P);
  for(j=n-1;j>0;j--)
    {imax=0;
     for(i=1;i<j;i++)
     if (A[i]>A[imax])
     imax=i;
     y=A[imax];
     A[imax]=A[j];
     A[j]=y;
    }

  for(i=0;i<n;i++)
  printf("\n %.0f",A[i]);
  getch();
}
при сортировке массива, например элементы массива:-10,-5,5,10 сортирует неверно.

Последний раз редактировалось alex(21); 15.02.2010 в 16:36.
alex(21) вне форума Ответить с цитированием
Старый 15.02.2010, 21:18   #2
alex(21)
Форумчанин
 
Аватар для alex(21)
 
Регистрация: 09.06.2009
Сообщений: 545
Сообщение

разве всё правильно или язык настолько старый что с ним никто не пользуется???
alex(21) вне форума Ответить с цитированием
Старый 16.02.2010, 09:30   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Скажу так у меня 2010 Си:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
/*В одномерном массиве, состоящем из n вещественных элементов, вчислить:
1) сумму отрицательных элементов;
2)произведение элементов массива, расположенных между максимальными минимальным элементами.
упорядочить элементы массива.
)*/

int _tmain(int argc, _TCHAR* argv[])
list<float> l;
	const int n=5;
	float a[n],summin=0,pr=1;
	int imax=0,imin=0;
	for(int i=0;i<n;i++){
	 a[i]=100-rand()/100;
	 l.push_front(a[i]);
	 summin+=(a[i]<0)?a[i]:0;
	 imax=(a[i]>a[imax])?i:imax;
	 imin=(a[i]<a[imin])?i:imin;
	 printf("%5.2f\n",a[i]);
	}
	if(imax<imin){int q=imax;imax=imin;imin=q;}
	for(;imin<=imax;imin++){pr*=a[imin];}
	 printf("\nSumaMinov=%5.2f\nProizved=%5.2f",summin,pr);
	 l.sort();
	 printf("\n");
//упорядочить элементы массива.
	 for(list< float>::iterator  i = l.begin();  i != l.end(); i++)
      {
           printf("\t%5.2f",*i);
      }
	getchar();
	return 0;
}
Единственное что, я сортировку не писал - это не раз обсуждалось.
Выделенное жирным заменишь на свою main

Дописано - вот осилил сортировку
I'm learning to live...

Последний раз редактировалось Stilet; 16.02.2010 в 10:07.
Stilet вне форума Ответить с цитированием
Старый 16.02.2010, 11:18   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

alex(21), какая-то странная сортировка у тебя...
Я привык делать так

Код:
for(int i=0;i<n-1;i++)
   for(int j=i+1;j<n;j++)
       if(A[i]>A[j])
       { 
         tmp=A[i];
          A[i]=A[j];
          A[j]=tmp;
       }
counter вне форума Ответить с цитированием
Старый 16.02.2010, 11:35   #5
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

Не оптимальный алгоритм:
Код:
t==true
while t do
{
t==false;
for(int i=0;i<n-1;i++)
   for(int j=i+1;j<n;j++)
       if(A[i]>A[j])
       { 
         tmp=A[i];
          A[i]=A[j];
          A[j]=tmp;
          t==true;
}
}
Такой вариант при частично отсортированном массиве будет быстрее работать
danekne вне форума Ответить с цитированием
Старый 16.02.2010, 12:11   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от danekne Посмотреть сообщение
Такой вариант при частично отсортированном массиве будет быстрее работать
такой вариант вообще работать не будет
counter вне форума Ответить с цитированием
Старый 16.02.2010, 12:14   #7
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

Ну, я думаю алгоритм понятен. в синтаксисе ошибки. Придираться не стоит. Просто если не было ни одной перестановки на предыдущей итерации, гонять массив дальше не стоит
danekne вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Турбо паскаль MacFly Помощь студентам 1 22.12.2009 16:23
турбо Си alex(21) Общие вопросы C/C++ 7 31.10.2009 20:07
Турбо Си Zid@ne Общие вопросы C/C++ 13 19.05.2009 13:49
Турбо паскаль Gabi Помощь студентам 2 24.12.2008 22:18
Турбо Паскаль Jondeer Помощь студентам 5 27.10.2007 17:19