Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Смотритель
0 / 0 / 0
Регистрация: 16.12.2008
Сообщений: 19
#1

Задача на Метод сортировки (Слияние)

16.12.2008, 18:32. Просмотров 1976. Ответов 1
Метки нет (Все метки)

Здравствуйте! Прошу пожалуйста помочь сделать зачетную работу на С++.

Задание:
Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента (в примере ниже, сделано левее минимального, т.е нужно исправить), и имеющие нечетный индекс. Массив В отсрортировать по возрастанию, используя метод слияния. (сортировку тоже нужно доработать или исправить чтобы работало)

Вот пример работы, кто сможет переделать чтобы работало по заданию , сделайте, пожалуйста, очень нужно, иначе зачет не смогу получить

Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
  int a[20], b[20]; 
  int n, m;      

  char menu() {
    char ch;
    clrscr();
    while (1) {
	printf("Vibirite Variant:\n");
	printf("1. Generacia\n");
	printf("2. Vvod s klavi\n");
	printf("3. Zagruzka iz faila\n\n");
	printf("0. Vixod\n\n");
	printf("Vvedite nomer punkta*: ");
	ch = getch();
	if (ch == '1' || ch == '2' || ch == '3' || ch == '0')
	return ch;
	clrscr();
	printf("Vi vveli neverniy nomer*.\n\n");
    }
  }

  void generateArray() {
    int i; 
    n = random(19)+2;
    for (i = 0; i < n; i++)
	a[i] = random(20);
  }

  void readArray() {
    int i;
    printf("\nVvedite chislo elementov* n = ");
    scanf ("%d", &n);
    for (i = 0; i < n; i++) {
	printf("Vvedite %d element: ", i+1);
	scanf("%d", &a[i]);
    }
  }

  void loadArray() {
    int i; 
    FILE * fin = fopen("in.txt", "rt");
    fscanf(fin, "%d", &n);
    for (i = 0; i < n; i++)
	fscanf(fin, "%d", &a[i]);
    fclose(fin);
  }

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

  int FindMin() {
    int i; 
    int num_min, min;
    min = a[0];
    num_min=0;
    for (i = 0; i < n; i++) {
	if (min > a[i]) {
	    num_min = i;
	    min = a[i];
	}
    }
    m=0;
    for (i = 0; i <= num_min; i++) {
	if (i % 2 == 1) {
	    b[m] = a[i];
	    m++;
	}
    }
    return num_min;
  }


  void writeArrayB() {
    int i; //‘зҐвзЁЄ
    for (i = 0; i < m; i++) {
	printf("%d ", b[i]);
    }
  }

  void DeleteArrayA(int col) {
    int i;
    for (i = col; i < n; i++) {
	a[i]=a[i+1];
    }
    n--;
  }

  //Sliyanie
  void merge(int a[], int b[], int c, int d, int e) {

       int p1=c, p2=d, pres=c;

       while (p1 < d && p2 < e)
	    if (a[p1] < a[p2])
		b[pres++] = a[p1++];
	    else
		b[pres++] = a[p2++];
       while (p1 < d)
	    b[pres++]=a[p1++];
       while (p2 < e)
	    b[pres++]=a[p2++];
}

  //Sortirovka
  void Sort(int a[], int n) {

       int *temp, *a2 = a, *b = (int*) malloc (n*sizeof(int)), *b2;
       int c, k = 1, d, e;
       b2=b;

       while (k <= 2*n) {
	    for (c = 0; c < n; c += k*2) {
		 d = c + k < n ? c + k : n;
		 e = c + 2 * k < n ? c + 2 * k : n;
		 merge (a2, b, c, d, e);
	    }
	    temp = a2; a2 = b; b = temp;
	    k *= 2;
      }
      for (c = 0; c < n; c++)
	   a[c] = a2[c];
	   free(b2);
}


  int main() {
    int i; 
    int num_min;
    int ost, d;
    int first, last;
    switch (menu()) {
    case '1':
	randomize();
	generateArray();
	break;
    case '2':
	readArray();
	break;
    case '3':
	loadArray();
	break;
    default:
	return 0;
    }
    printf("\Massiv A posle zapolnenia:\n");
    writeArrayA();
    num_min=FindMin();
    d = 1;
    for (i = 0; i <= num_min; i++) {
	if (d == 1)
	    ost = 1;
	else
	    ost = 0;
	if (i % 2 == ost) {
	    DeleteArrayA(i);
	    num_min--;
	    if (ost == 1)
		d = 0;
	    else
		d = 1;
	}
    }
    printf("\n Massiv B posle zapolnenia:\n");
    writeArrayB();
    printf("\n Massiv A posle udalenia elementov:\n");
    writeArrayA();
    printf("\n");
   // first = 0;
  //  last = m;
    Sort(b, n);
    printf("\Massiv B posle sortirovki:\n");
    writeArrayB();
    return 0;
  }

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2008, 18:32
Ответы с готовыми решениями:

Н-ленточное слияние с метод сортировки
Осуществить программную реализацию сортировки информации заданного вида...

Н-ленточное слияние с метод сортировки
Осуществить программную реализацию сортировки информации заданного вида...

Сортировки (пузырек, быстрая, шелл, слияние)
Доброго дня. Имеется программа сортировок пузырьком, быстрая, шеллом, слиянием....

Метод медиан из трех элементов VS улучшенный быстрый метод сортировки(метод Бентли-Макилроя)
Здравствуйте! Дали весьма интересное задание. Сравнить два вышеуказанных метода...

Внешние сортировки. Сортировка слиянием. Естественное слияние
Пом-гите решить, заранее благодарен.)) Билет 9 1 .Внешние сортировки....

1
вандал
127 / 127 / 25
Регистрация: 20.11.2009
Сообщений: 498
22.12.2009, 14:59 #2
она не компилируется эта работа которая выложена
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2009, 14:59

Внешние сортировки. Сортировка слиянием. Простое слияние
Пом-гите решить, заранее благодарен.)) Билет 8 1 .Внешние сортировки....

Сравнительный анализ Методов Сортировки(метод прямого выбора,метод слиянием,сортировка подсчетом)
Ввод данных: 1. с клавиатуры, 2.с файла (C:\Users\'NAME'\Desktop), 3.случайным...

Изменить метод "быстрой сортировки" на метод "сортировки вставками"
Как изменить метод &quot;интеративной быстрой сортировки&quot; на метод &quot;сортировки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru