Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
1

Переписать код с С++ на VBA (сортировка массивов и запись в файл)

03.12.2012, 23:19. Просмотров 824. Ответов 9
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include <algorithm>
#include <iostream>
#include<windows.h>
using namespace std;
//newGap Function
double createGap( double gap ) 
{
  gap = ( gap * 10 ) / 13;
  
  if ( gap == 9 || gap == 10 )
    gap = 11;
  if (gap < 1)
    gap = 1;
  return gap;
  
}//end newGap Function
 
 
void combSort(int *data, int size) 
{FILE*fp,*fq;
  int gap = size,h=1;
  while(true) {
      gap = createGap( gap );
      bool swapped = false;
    for (int i = 0; i < size - gap; i++) {
      int j = i + gap;
      if ( data[i] > data[j] ){
          printf("шаг %d=\элемент%d\nменяется на элемент%d\n",h,data[i],data[j]);
        swap(data[i], data[j]);
        swapped = true;
        fprintf(fq,"шаг=%d\n",h);
        h++;
 
        for(i=0;i<size;i++)
        printf("%d\t",data[i]);
        system("pause");
        {
        
        }}//end if
    
    }//end for
    
    if (gap == 1 && !swapped)
      break;
  }//end for
}//end combSort Function
  int main()
{  
    int size,h,k;
    SetConsoleOutputCP(1251);
    FILE*fp,*ft,*fb;
    fp=fopen("запись  массива(руч).txt","w");
    printf("введите 1,если строку нужно вводить с клавиатуры,или 2 если с файла\n ");
scanf("%d",&k);
if(k!=1 && k!=2)
{
printf("Введенные данные не верны!");
exit(0);
return 0;
}
if(k==1)
{
    printf("размерность=");
    scanf("%d",&size);
    int *data = new int[size];
    printf("До сортировки:\n");
    fprintf(fp,"До сортировки\n");
    for ( int i = 0; i < size; i++ )
    {
    printf("data[%d]=",i+1);
    scanf("%d",&data[i]);
    fprintf(fp,"%d\t",data[i]);
    }
    combSort(data, size);
        printf( "После сортировки: \n");
    fprintf(fp,"\nпосле сортировки\n");
    for ( int i = 0; i < size; i++ )
    {printf(" %d ",data[i]);
    fprintf(fp,"%d\t",data[i]);
    }
fclose(fp);}
if (k==2)
{
if((ft=fopen("Массив.txt","a+"))==NULL)
{perror("ошибка");
system("PAUSE");
system("cls");
return 0;}
fb=fopen("запись в файл(считанного отсортированого).txt","w");
{fscanf(ft,"%d",&size);
cout<<"Размерность="<<size<<endl;
int *data = new int[size];
cout<<"Считанный массив"<<endl;
for ( int i = 0; i < size; i++ )
{fscanf(ft,"%d",&data[i]);
printf("%d\t",data[i]);
}
combSort(data, size);
cout<<endl <<"После сортировки"<<endl;
for ( int i = 0; i < size; i++ ){
    printf("%d\t",data[i]);
fprintf(fb,"%d\t",data[i]);
}}}}


Особую сложность вызывает функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void combSort(int *data, int size) 
{FILE*fp,*fq;
  int gap = size,h=1;
  while(true) {
      gap = createGap( gap );
      bool swapped = false;
    for (int i = 0; i < size - gap; i++) {
      int j = i + gap;
      if ( data[i] > data[j] ){
          printf("шаг %d=\элемент%d\nменяется на элемент%d\n",h,data[i],data[j]);
        swap(data[i], data[j]);
        swapped = true;
        fprintf(fq,"шаг=%d\n",h);
        h++;
 
        for(i=0;i<size;i++)
        printf("%d\t",data[i]);
        system("pause");
        {
        
        }}//end if
    
    }//end for
Буду очень благодарен, если кто-нибудь еще поможет с реализацией шага назад и шага вперед в этой сортировке
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2012, 23:19
Ответы с готовыми решениями:

Переписать код с switch на код с использованием массивов
&lt;?php $action = $_POST; switch($action){ case 'first' echo 'первый' break; case 'red' echo...

Переписать код с С++ для VBA
intz.Function(s.String) intzf=int for i=1 to n-1 while i+zf&lt;n and s]=s] zf++ return zf Не...

Переписать код из VBA в Scilab
Народ, помогите, нужно переписать код из VBA в Scilab. У меня с этим возникли проблемы. Заранее...

Сумма прописью: переписать код под VBA
Вот нашла код многоуважаемого Бурундука, для аксеса: Static one(0 To 19, 1 To 2) As String,...

9
5456 / 1136 / 50
Регистрация: 15.09.2012
Сообщений: 3,442
04.12.2012, 07:11 2
DeadGod, напишите словесное описание задания.
1
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
04.12.2012, 13:09  [ТС] 3
Разработанная программа должна реализовывать алгоритм, указанный в задании, и позволять выполнять его по шагам.должна позволять выполнять его последовательно по одному шагу.
Главное окно программы должно содержать панель управления, область для ввода исходных данных и область для визуализации процесса выполнения алгоритма. Панель управления должна содержать следующие кнопки:
• Выполнить – программа выполняет полностью алгоритм либо с начала, либо с текущего шага и отображает пользователю результат работы;
• Шаг вперед – нажатие на эту кнопку начинает процесс отладки. Программа выполняет очередной шаг алгоритма, отображает новое состояние в области визуализации и краткую информацию того что будет сделано на следующем шаге;
• Шаг назад – программа возвращается на предыдущий шаг алгоритма, отображает предыдущее состояние в области визуализации и краткую информацию того что будет сделано на следующем шаге;
• Остановить – останавливает процесс отладки;
У меня алгоритм Алгоритм сортировки расчёской (англ. Combsort);
0
5456 / 1136 / 50
Регистрация: 15.09.2012
Сообщений: 3,442
04.12.2012, 13:21 4
DeadGod, на Форуме программистов такой принцип "чем короче вопрос - тем быстрее ответ". Ждите, когда всё это будет кто-то читать, а потом делать.
1
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
04.12.2012, 13:50  [ТС] 5
Вообщем нужно сделать так.Например шаг 1: первый элемент поменялся с третьим и показать преобразованный массив,нажал на кнопку следующий шаг и так поочередно все шаги в том порядке как они происходят в сортировке.Ну а с шагом назад думаю все понятно
0
5456 / 1136 / 50
Регистрация: 15.09.2012
Сообщений: 3,442
04.12.2012, 13:57 6
DeadGod, основное в вашем задании - это получить код VBA, который делает сортировку. Вам нужно сделать сортировку "Расчёстка". Так?

Уже, получив код VBA, который делает сортировку "Расчёстка", можно переходить к следующим действиям.
Нужно подождать, кто вам поможет написать код VBA, производящий сортировку "Расчёстка". Я не смогу помочь, я только две сортировки знаю: Пузырёк и Выбор.
0
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
04.12.2012, 14:15  [ТС] 7
Скрипт,да так.
0
Заблокирован
04.12.2012, 14:42 8
Из google, видимо для Excel -
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    Function Combsort(Values As Range) As Variant()
     
        Dim N As Long
        Dim Answer() As Variant
        Dim Counter As Long
        Dim Swap As Boolean
        Dim Temp As Variant
        Dim Gap As Integer
         
         
        N = Values.Rows.Count
        ReDim Answer(1 To N)
         
        Gap = N / 1.3
         
         
        For Counter = 1 To N
            Answer(Counter) = Values(Counter)
        Next
         
        Answer(Gap) = Values(Gap)
         
        Do
             
            Swap = False
            For Counter = 1 To N - 1
                If Answer(Counter) > Answer(Gap) Then
                Swap = True
                Temp = Answer(Counter)
                Answer(Counter) = Answer(Gap)
                Answer(Gap) = Temp
                End If
            Next
         
        Loop While Swap
         
        Combsort = Application.Transpose(Answer)
         
     
    End Function
0
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
04.12.2012, 15:00  [ТС] 9
она как бы сортирует не правильно...(
0
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
05.12.2012, 18:12  [ТС] 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <algorithm>
#include <iostream>
 
/*
Comb Sort Algorithm
Author: Captainhampton
*/
 
using namespace std;
 
//newGap Function
int createGap( int gap ) 
{
  gap = ( gap * 10 ) / 1.3;
  
  if ( gap == 9 || gap == 10 )
    gap = 11;
  
  if (gap < 1)
    gap = 1;
  
  return gap;
}//end newGap Function
 
 
void combSort(int data[], int size) 
{
  int gap = size;
  
  while(true) {
      gap = createGap( gap );
      bool swapped = false;
    
    for (int i = 0; i < size - gap; i++) {
      int j = i + gap;
 
      if ( data[i] > data[j] ){
        swap(data[i], data[j]);
        swapped = true;
      }//end if
    
    }//end for
    
    if (gap == 1 && !swapped)
      break;
  }//end for
}//end combSort Function
 
 
int main()
{
    //Test data set
    int data[5] = { 5, 2, 3, 1, 4 };
    int size = 5;
 
    cout << "***Combsort Algorithm***" <<endl <<endl;
 
    //Print presorted data items
    cout << "Pre-Sorted Data Set: "<<endl;
    for ( int i = 0; i < 5; i++ )
        cout << data[i] << " ";
    cout << endl;
 
    combSort(data, size);
    cout << endl;
 
    //Print sorted data items
    cout << "Combsorted Data Set: " <<endl;
    for ( int i = 0; i < 5; i++ )
        cout << data[i] << " ";
    cout << endl <<endl;
 
  return 0;
}
перепишите этот код..
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private size As Integer
Private data() As Integer
 
 
Function GreateGap(Gap As Double) As Double
Gap = (Gap * 10) / 13
  
  If (Gap = 9 Or Gap = 10) Then
    Gap = 11
    End If
  If (Gap < 1) Then
    Gap = 1
 End If
End Function
 
Function CombSort(data() As Integer, size As Integer)
Dim I, J, Temp, Gap, Swapped
Gap = size
Gap = GreateGap(Gap)
Swapped = False
For I = 0 To size - Gap Step 1
  J = I + Gap
  If data(I) > data(J) Then
    swap (data(I) = data(J))
    Swapped = True
  End If
Exit For
If Gap = 1 Then
  Exit Function
End If
End Function
вот что я написал..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2012, 18:12

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

Переписать код под использование динамических массивов
Народ исправте плз код мне нужно в задании чтобы массив &quot;s&quot; создавался динамичиский(динамической...

Переписать элементы из массивов в файл
Помогите, пожалуйста, с программой. Не знаю как написать процедуру переписи элемента массива в файл...

Запись строки в массив, сортировка, удаление и запись в файл
Нужна помощь. Из edit box к нам приходят строки мы их фильтруем. нужно строки записать в массив,...

Сортировка 2 массивов по возрастанию и используя метод слияния запись в другой массив
пожалуйста очень очень необходима задача ,если можно до завтрашних 9.00 Суть задачи 2...

Запись двух массивов в файл
День добрый, в плюсах немного краб, дальше создания массивов еще не пошел, а тут появилась нужда...

Сортировка массивов методом подсчета: написать код по образцу
Здравствуйте, еще раз выкладываю вот это задание: СОртировка массивов методом подсчета. Внизу есть...


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

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

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