Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевод кода из Си в VB, Котовый код 
:(
    Опции темы
SIMarOK
Дата 22.12.2004, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



Помогите пожалуйста перевести код из си в бэйсик. Весь алгоритм тодже, только нужно это представить в языке VB, вот код в си:
Код

# include <stdio.h>
# include <conio.h>
# define N 8
//--------------------start function zapolnenia massiva
void massivShnik(float *mas)
{
int i;
float g;
i=0;
printf("Vvedite massiv\n");
do
{
printf("mas[%d]=", i);
scanf("%f", &mas[i]);
i++;
}
while (i<N);
clrscr();
}
//---------------------end funstion
//---------------------start funstion naxojdenia srednego polojitelnix
float SredPol(float *mas)
{
float sum=0;
int kol=0;
float sr;
for ( int i=0;i<N;i++){
if (mas[i]>0) {sum+=mas[i];kol++;}
}
sr=sum/kol;
return sr;
}
//--------------------end funstion
//--------------------start funstion raspechatka rezultatov
void Print(float *mas, float g, float pp)
{
int i;
printf("Isxodniy massiv:\n");
for (i=0; i<N; i++)
{
printf("mas[%d]=%.02f ", i, mas[i]);
}
printf("\nZagadannoe chislo: %2.1f", g);
printf("\nSrednee dlia polojitelnix elementov: %.02f", pp);
}
//--------------------end funstion
//--------------------start funstion preobrazovanie maasiva
void Preob(float *mas, float g, float pp)
{
float masB=0;
float max=masB;
int ss=0;
int k=0;
printf("\nPoluchenniy massiv:\n");
if (pp>g){
for (int i=0;i<N;i++){
if (mas[i]>0) {masB=mas[i]-g; k++;}
else if (mas[i]!=0) {masB=mas[i]+g; k++;}
printf("masB[%d]=%.02f ", i, masB);
if (masB>max){
max=masB;
ss=k-1;
}
}
printf("\nNomer maksimuma: mas[%d]=%.02f", ss, max);
}
else
printf("\nSrednee menshe dannogo 4isla. STOP");

}
//--------------------end funstion
void main ()
{float g, pp, max;
float mas[N];
int i, ss;
massivShnik(mas);
printf("Vvedite 4islo\n g=", g);
scanf("%f", &g);
clrscr();
pp=SredPol(mas);
Print(mas, g, pp);
Preob(mas, g, pp);
getch();
}



это программа сделана по следующему условию:
В массиве, содержащем не более 21 числа, подсчитать среднее арифметическое для положительных элементов. Если среднее больше заданного числа, положительные элементы исходного массива уменьшить на это число, а отрицательные - увеличить. Найти максимальный элемент полученного массива и его номер. Формат числа ±цц.ц.


Спасибо.
PM MAIL   Вверх
Akina
Дата 22.12.2004, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Изготовление зачетных задач и решение контрольных - это в разделе "Работа".


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SIMarOK
Дата 22.12.2004, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



Цитата(Akina @ 22.12.2004, 20:05)
Изготовление зачетных задач и решение контрольных - это в разделе "Работа".

к разделу "Работа" это никоем образом отношения не имеет. Я лишь прошу помочь...тех кто может...
PM MAIL   Вверх
cardinal
Дата 22.12.2004, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



SIMarOK, бери да переводи построчно. Что будет непонятно подскажем.

То что там на Си это консольное приложение. Ты же не консольное хочешь, а только алгоритмы? Если так, то всякие printf, getch и т.д. у тебя превратятся во что-нибудь типа msgbox и inputbox (см. MSDN).

Ну и остались одни функции, переменные и циклы всякие. Пробуй сам. smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
SIMarOK
Дата 22.12.2004, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



вот. посмотрите пожалуйста, что-то сделал...но не работает...наверно куча ошибок:
Код

Function a() As Single
Public a(i) As Single
Label2.Visible = True
Label2.Caption = "Èñõîäíûé ìàññèâ:"
For i% = 0 To 21
a(i%) = Val(InputBox("a(i%)=", "a(i%)"))
Label2.Caption = "Èñõîäíûé ìàññèâ:"
Label2.Caption = Str(a(i%))
Next i%
End Function

Function sr(y As Single) As Single
Public a(i) As Single
Sum = 0
kol = 0
For i% = 0 To 21 Step 1
If a(i%) > 0 Then
Sum = Sum + a(i%)
kol = kol + 1
Next i%
sr = Sum / kol
End Function

Private Sub Preob(a As Single, g As Single, pp As Single)
Public a(i) As Single
newmas = 0
Max = newmas
ss = 0
k = 0
Label1.Visible = True
Label1.Caption = "Poluchenniy massiv:"
If pp > g Then
For i% = 0 To 21 Step 1
If a(i%) > 0 Then
newmas = a(i%) - g
k = k + 1
ElseIf a(i%) <> 0 Then
newmas = a(i%) + g
k = k + 1
Label1.Caption = "newmas="
Label1.Caption = Str(newmas)
If newmas > Max Then
Max = newmas
ss = k - 1
Next i%
Label1.Caption = "Nomer Maksimuma"
Label1.Caption = Str(ss)
Else
Call MsgBox("Ñðåäíåå ìåíüøå äàííîãî, îñòàíîâêà ïðîãðàììû", vbOKOnly, "Îøèáêà")
End Sub

Private Sub Command1_Click()
g = Val(InputBox("g=", "g", "10"))
pp = sr(a(i%))

End Sub

PM MAIL   Вверх
boevik
Дата 23.12.2004, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



SIMarOK, а лто именно не работает?


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
SIMarOK
Дата 23.12.2004, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



Сама программа не работает...указывает ошибку Wrong number of arguments or invalid property assigment и указывает на строку
Код

Private Sub Command1_Click() ' сюда
g = Val(InputBox("g=", "g", "10"))
pp = sr(a(i%))


Мне кажется я массив не так указал, все правельно?
Кстати я очень сомниваюсь с функциями, как им передать нужные значения?
PM MAIL   Вверх
Akina
Дата 23.12.2004, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А у тебя на форме кноп Command1 имеется???


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SIMarOK
Дата 23.12.2004, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



естественно, потвоему как я программу запускаю?%)
PM MAIL   Вверх
boevik
Дата 23.12.2004, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Точно, куча ошибок.
Начинается с первых же двух строк.
Код

Function a() As Single
Public a(i) As Single



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
SIMarOK
Дата 23.12.2004, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



а какая там ошибка? я не вижу smile
PM MAIL   Вверх
Akina
Дата 23.12.2004, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



SIMarOK
1) совпадение глобальных на уровне модуля имен
2) использование не определенной переменной
Добавлено @ 11:12
Цитата(SIMarOK @ 23.12.2004, 10:56)
естественно, потвоему как я программу запускаю?%)

а связь-то какая?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SIMarOK
Дата 23.12.2004, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



я вот незнаю как пожключить функцию без присваивания к переменной...и еще чтоб что-то ей передовалось, в си это просто...имя функции( список параметров) а в басике незнаю...знаю что можно с помощью присвоения, но в моем случае это не используется....
PM MAIL   Вверх
$tatic
Дата 23.12.2004, 17:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Элементарно
Надо просто юзать функцию без скобок
(например msgbox "Hello, world!")
Цитата(SIMarOK @ 23.12.2004, 11:20)
как пожключить функцию без присваивания к переменной


  Вверх
Akina
Дата 23.12.2004, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата
Надо просто юзать функцию без скобок

В общем случае неверно. Не всегда можно использовать бесскобочный вызов.

Для того чтобы значение, возвращаемое функцией, было проигнорировано, надо ее вызывать как процедуру, обязательно используя оператор CALL.

т.е. одно из двух:
Код

msgbox "Hello, world!"
CALL msgbox("Hello, world!")

но второе - правильно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SIMarOK
Дата 23.12.2004, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



изменил как вы и сказали, теперь следующее:
вылетает ошибка Sub or Function not defined
и указвыает на строку Call sr(a(i%)) выделяя при этом а.

Код

Function b() As Single
Public a(i) As Single
Label2.Visible = True
Label2.Caption = "Èñõîäíûé ìàññèâ:"
For i% = 0 To 21
a(i%) = Val(InputBox("a(i%)=", "a(i%)"))
Label2.Caption = "Èñõîäíûé ìàññèâ:"
Label2.Caption = Str(a(i%))
Next i%
End Function

Function sr(y As Single) As Single
Public a(i) As Single
Sum = 0
kol = 0
For i% = 0 To 21 Step 1
If a(i%) > 0 Then
Sum = Sum + a(i%)
kol = kol + 1
Next i%
sr = Sum / kol
End Function

Private Sub Preob(a As Single, g As Single, pp As Single)
Public a(i) As Single
newmas = 0
Max = newmas
ss = 0
k = 0
Label1.Visible = True
Label1.Caption = "Poluchenniy massiv:"
If pp > g Then
For i% = 0 To 21 Step 1
If a(i%) > 0 Then
newmas = a(i%) - g
k = k + 1
ElseIf a(i%) <> 0 Then
newmas = a(i%) + g
k = k + 1
Label1.Caption = "newmas="
Label1.Caption = Str(newmas)  'xz
If newmas > Max Then
Max = newmas
ss = k - 1
Next i%
Label1.Caption = "Nomer Maksimuma"
Label1.Caption = Str(ss)
Else
Call MsgBox("Ñðåäíåå ìåíüøå äàííîãî, îñòàíîâêà ïðîãðàììû", vbOKOnly, "Îøèáêà")
End Sub

Private Sub Command1_Click()
g = Val(InputBox("g=", "g", "10"))
Call b
Call sr(a(i%))
Call Preob(a, g, pp)

End Sub

PM MAIL   Вверх
Akina
Дата 23.12.2004, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Я вообще не понимаю как он у тебя живет в этой каше.
Почитай что-нить про определение переменных и область их видимости.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
SIMarOK
Дата 23.12.2004, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 25.10.2004

Репутация: нет
Всего: нет



я и говорю что программа не работала и не работает...в связи с чем прошу помочь ее оптимизировать...
PM MAIL   Вверх
boevik
Дата 23.12.2004, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Тут не оптимизировать надо, тут надо переписывать заново.
Для начало, сделай, то что Akina написал.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
cardinal
Дата 23.12.2004, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



1. Достаточно задекларировать массив один раз. Размер его известен. Написать на самом верху:
Код

Private a(21) As Single

2. Делай сдвиги в коде. Такой код читать невозможно.
3. Соблюдай простые правила такие как: сколько if столько и if end и т.д.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
_Serj_
Дата 24.12.2004, 04:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

Option Explicit

Private Const SET_DIG = 2
Private Const MAX_ELEM = 20

Sub main()
Dim sngAver As Single
Dim arr(0 To MAX_ELEM) As Single

 Call InitArray(arr)
 
 sngAver = Average(arr)
 Debug.Print "___Cр. арифм. для положительных элементов = " & sngAver
 
 Call Transform(arr, sngAver)

End Sub


Sub InitArray(arr() As Single)
Dim i As Integer, ipos As Integer
Dim tmp As Single

For i = 0 To MAX_ELEM
   arr(i) = i
Next i
 
Debug.Print "___Начальный массив___"

Randomize
For i = UBound(arr) To LBound(arr) Step -1
   ipos = Int((i - LBound(arr) + 1) * Rnd + LBound(arr))
   tmp = arr(ipos)
   arr(ipos) = arr(i)
   arr(i) = tmp
   Debug.Print "arr[" & i & "]" & " = " & arr(i)
Next i

End Sub

Function Average(mas() As Single) As Single
Dim sum As Single, i As Integer

For i = 0 To MAX_ELEM
  If mas(i) > 0 Then sum = sum + mas(i)
Next i
Average = Round(sum / i, 1)
End Function

Sub Transform(mas() As Single, ByVal aver As Single)
Dim masB As Single, max As Single
Dim ss As Integer, i As Integer

If aver > SET_DIG Then

 Debug.Print "___Получим новый массив___"
 
 For i = 0 To MAX_ELEM
 
      If mas(i) > 0 Then
         masB = mas(i) - SET_DIG
      ElseIf mas(i) <> 0 Then
         masB = mas(i) + SET_DIG
      End If
     
      Debug.Print "arr[" & i & "]" & " = " & masB
     
      If masB > max Then
         max = masB
         ss = i
      End If
     
  Next i
 
  Debug.Print "___Max значение в arr[" & ss & "] = " & max
 
Else

 Debug.Print "\nSrednee menshe dannogo 4isla. STOP"

End If

End Sub


См. в Immediate Window
  Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0699 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.