Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 21.12.2008, 14:22   #1
Freia
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 26
Репутация: 10
По умолчанию Си -Расположить элементы в порядке возрастания от первого нулевого элемента до отрицательного элемента

ПОЖАЛУЙСТА ПОМОГИТЕ!!! Разработать рабочую программу сортировки элементов массива чисел, введенных с клавиатуры.

Расположить элементы в порядке возрастания от первого нулевого элемента до первого отрицательного элемента массива.

Тип вводимых элементов массива: Вещественный double.

Тип выводимых данных: Вещественный float....это надо на си,а не на си ++..буду рада любой помощи

Последний раз редактировалось Freia; 21.12.2008 в 15:02.
Freia вне форума   Ответить с цитированием
Старый 21.12.2008, 15:33   #2
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
Репутация: 76
По умолчанию

если правильно понял условие, то код такой:
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#pragma hdrstop

//---------------------------------------------------------------------------
template<class T>  void Sort(T* a, long N) {
// На входе - массив a[], a[N] - его последний элемент.

  long i = 0, j = N; 		// поставить указатели на исходные места
  T temp, p;

  p = a[ N>>1 ];		// центральный элемент

  // процедура разделения
  do {
    while ( a[i] < p ) i++;
    while ( a[j] > p ) j--;

    if (i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
      i++; j--;
    }
  } while ( i<=j );


  // рекурсивные вызовы, если есть, что сортировать
  if ( j > 0 ) Sort(a, j);
  if ( N > i ) Sort(a+i, N-i);
}
#pragma argsused
int main(int argc, char* argv[])
{
int m=0;
cout<<"m=";
cin>>m;
double *a = new double[m];
for(int i = 0; i < m; i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
int k=-1,m1=m;
for (int i=0;i<m;i++)
   {
   if (!a[i]&&k==-1) k=i;
   if (!a[i]<0&&m1==-1) m1=i;
   if (k>0&&m1>0) break;
   }
if (k<0||m1<0) {k=0;m1=m;}
Sort<double>(&a[k],m1-k);
for (int i=0;i<m;i++)
    cout<<a[i]<<" ";
getch();
        return 0;
}
//---------------------------------------------------------------------------
Reskov вне форума   Ответить с цитированием
Старый 21.12.2008, 15:53   #3
Freia
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 26
Репутация: 10
По умолчанию

Это си ++,а мне надо просто си(((
Freia вне форума   Ответить с цитированием
Старый 21.12.2008, 15:57   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
Репутация: 76
По умолчанию

Ладно будет тебе С
Код:
//---------------------------------------------------------------------------

#pragma hdrstop
#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
//---------------------------------------------------------------------------

#pragma argsused
void Sort(double *a, long N) {
// На входе - массив a[], a[N] - его последний элемент.

  long i = 0, j = N; 		// поставить указатели на исходные места
  double temp, p;

  p = a[ N>>1 ];		// центральный элемент

  // процедура разделения
  do {
    while ( a[i] < p ) i++;
    while ( a[j] > p ) j--;

    if (i <= j) {
      temp = a[i]; a[i] = a[j]; a[j] = temp;
      i++; j--;
    }
  } while ( i<=j );


  // рекурсивные вызовы, если есть, что сортировать
  if ( j > 0 ) Sort(a, j);
  if ( N > i ) Sort(a+i, N-i);
}
void main(void)
{
int m=0;
int i = 0;
int k=-1,m1=-1;
double *a;
printf("m=");
scanf("%d",&m);
a=(double *) malloc(4*m);
for(i = 0; i < m; i++)
{
printf("a[%d]=",i);
scanf("%lf",&a[i]);
}

for (i=0;i<m;i++)
   {
   if ((!a[i])&&(k==-1)) k=i;
   if (a[i]<0&&(m1==-1)) m1=i;
   if (k>0&&m1>0) break;
   }
if (k<0||m1<0) {k=0;m1=m;}
Sort(&a[k],m1-k);
for (i=0;i<m;i++)
    printf("%lf ",a[i]);;
getche();
free(a);
}
//---------------------------------------------------------------------------
Reskov вне форума   Ответить с цитированием
Старый 21.12.2008, 16:02   #5
Freia
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 26
Репутация: 10
По умолчанию

СПАСИБО!!!ВОТ ЭТО ТО,что НУЖНО!!! =)) А вот эту тоже...Найти колличество чётных элиментов стоящих над главной диагональю матрицы в просто си...можно?
Freia вне форума   Ответить с цитированием
Старый 21.12.2008, 16:06   #6
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
Репутация: 76
По умолчанию

я думаю что можно
Reskov вне форума   Ответить с цитированием
Старый 21.12.2008, 16:07   #7
Freia
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 26
Репутация: 10
По умолчанию

А как,если не секрет?
Freia вне форума   Ответить с цитированием
Старый 21.12.2008, 16:14   #8
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
Репутация: 76
По умолчанию

Ну я думаю как-то так, но может быть кто-то думает по-другому, главное чтоб не твой препод)))
Код:
//---------------------------------------------------------------------------
#include <stdio.h>
#pragma hdrstop
//#include <brain.h>)))
//---------------------------------------------------------------------------

#pragma argsused
void main()
{
int m;
int **A;
int j=0;
int i=0;
int k=0;
printf("Dimension of matrix:");
scanf("%d",&m);
A=(double **) malloc(4*m);
for (i=0;i<m;i++)
  {
   A[i]=(double *) malloc(4*m);;
   for (j=0;j<m;j++)
       {
        printf("A[%d][%d]=",i,j);
        scanf("%d",&A[i][j]);
       }
  }

for (i=0;i<m;i++)
  {
   for (j=i+1;j<m;j++)
       {
        if (!(A[i][j]%2)) k++;
       }
  }
printf("Count  %d",k);
getch();
}
//---------------------------------------------------------------------------
Reskov вне форума   Ответить с цитированием
Старый 21.12.2008, 16:15   #9
Freia
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 26
Репутация: 10
По умолчанию

по заданию массив 8 5 0 2 6 1 -2 как нужно рассортировать? Скажи пожалуйста
Freia вне форума   Ответить с цитированием
Старый 21.12.2008, 16:18   #10
Freia
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 26
Репутация: 10
По умолчанию

по идее нужно так: 8 5 - оставить как есть, потомучто сортировать по возрастанию нужно после 0, 0 - вот ноль, от него нужно сортировать по возрастанию, т.е. 1 2 6 и сортируем до отрицательного числа, т.е до -2 .. и в результате должно быть: 8 5 0 1 2 6 -2
Freia вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив,найти номер последнего отрицательного элемента Ирочка Помощь студентам 2 31.03.2009 09:54
Как расположить в алфавитном порядке слова,содержащиеся в файле? JiLiYa Паскаль 0 20.12.2008 14:58
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 16:06
Расположить элементы массива в порядке убывания частоты встречаемости элементов. QWERT12345 Паскаль 7 14.11.2008 23:30
Поиск элемента ЭД4-0014 Помощь студентам 12 05.06.2008 21:47


16:35.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru