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

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

03.12.2012, 23:19. Показов 1173. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2012, 23:19
Ответы с готовыми решениями:

Переписать код с switch на код с использованием массивов
&lt;?php $action = $_POST; switch($action){ case 'first' echo 'первый' break; case 'red' echo 'красный' break; case 'blue' 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. У меня с этим возникли проблемы. Заранее очень благодарен! Нужно убрать графические...

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

Уже, получив код VBA, который делает сортировку "Расчёстка", можно переходить к следующим действиям.
Нужно подождать, кто вам поможет написать код VBA, производящий сортировку "Расчёстка". Я не смогу помочь, я только две сортировки знаю: Пузырёк и Выбор.
0
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
04.12.2012, 14:15  [ТС]
Скрипт,да так.
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
04.12.2012, 14:42
Из 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  [ТС]
она как бы сортирует не правильно...(
0
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 8
05.12.2012, 18:12  [ТС]
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.12.2012, 18:12
Помогаю со студенческими работами здесь

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

Переписать код под использование динамических массивов
Народ исправте плз код мне нужно в задании чтобы массив &quot;s&quot; создавался динамичиский(динамической памятью(malloc,realloc,calloc)).ЗАРАНЕЕ...

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru