Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Решить уравнение методом итерации http://www.cyberforum.ru/cpp-beginners/thread18660.html
Составить задачу на языке Си. Решить уравнение 1-x+sin x -ln(1+x)=0 методом итерации. Отрезок содержащий корень: Приближенное значение корня: 1,1474 #include <stdio.h> #include <math.h> ...
C++ Перевод дробных чисел из 10-й системы счисления в 2-ю и обратно Вот прога но есть проблема!Она не переводит отрицательные и дробные.Помогите кто может! #include<math.h> #include<conio.h> #include<stdlib.h> #include<stdio.h> #include<string.h> void... http://www.cyberforum.ru/cpp-beginners/thread18648.html
Системы счисления C++
Есто прога перевод числа из 2-ой в 10-ую систему счисления и обратно.Есть проблема как сделать чтоб она ещё и переводила отрицательные и не целые числа.Может кто знает как это сделать?...
Организовать работу с файлом при помощи меню C++
Если кто может, то помогите. Программа создает текстовый файл в текущей папке. Организовать работу с файлом при помощи меню: 1. Открытие файла (или создание) 2. Добавление строки в конец файла...
C++ разработка многокалончатого текстового редактора http://www.cyberforum.ru/cpp-beginners/thread18598.html
программа при запуске запрашивать колво колонок текста. Максимальная ширина области печати - 80 символов. Колонки отделяются друг от дуруга 2 - 3 пробелами. Высота колонок 25 символов. Курсор по...
C++ Помогите нарисовать блок-схему... Всем приятного время суток..Делаю курсовую, всё сделал, а чтоб защитить, надо ещё блок-схему нарисовать помогите плз... Вот задание: 6. Разработайте программу на выбранном Вами языке... подробнее

Показать сообщение отдельно
Смотритель
0 / 0 / 0
Регистрация: 16.12.2008
Сообщений: 19

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

16.12.2008, 18:32. Просмотров 1949. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru