powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP - > VB 6.0
16 сообщений из 16, страница 1 из 1
VFP - > VB 6.0
    #32470351
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может кто-нибудь помочь - перевести вот это:

close all

use ? Alias workTable

* кількість записів (строк)
N = Reccount()

* дані для порівняння
L = 25

* счетчик
A = 1

* створюємо тимчасову таблицю, куда будуть прописуватись
* групи по три записи
* поле MatMiddle - середнє з 3-х цифр
* поле Num - ідентифікатор групи

CREATE TABLE tmp ;
(tovar c(50), Belki N(2,0), Zhiri N(2,0), uglevodi N(2,0), MatMiddle N(10,3), Num N(10,0))

select workTable

* беремо цикл

FOR I=1 TO N

* перехід до запису с номером І
GO I
* вирахування сумми білків, жирів та вуглеводів у даній строці
Math_Middle = (workTable.Belki + workTable.Zhiri + workTable.uglevodi) / 3
* вставка у тимчасову таблицю запису
INSERT INTO tmp (tovar, Belki, Zhiri, uglevodi, MatMiddle, Num) ;
VALUES (ALLTRIM(workTable.tovar), workTable.Belki, workTable.Zhiri, workTable.uglevodi, Math_Middle, a)

A = A + 1
ENDFOR

* вибираємо мінімальне розходження
* 1-ша строка такого селекту і буде з мінімальним розходженням...
SELECT ABS(L - MatMiddle) AS AA, Num FROM tmp WHERE MatMiddle <> 0 ORDER BY AA INTO CURSOR t2

* фіксуємо 1-шу строку курсору Т2
SELECT t2
GOTO TOP
GroupNumber = t2.num

* вибираємо з тимчасової таблиці з усіма групами
* записи с зафіксованою вище групою...
SELECT tovar, Belki, Zhiri, uglevodi FROM tmp WHERE NUM = GroupNumber INTO TABLE Result

в код для Вижуал Бейсика 6,0... там НЕ должны присутствовать таблицы, а массивы и файлы данных (текстовики я так понимаю...)
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470535
А чем не нравится FoxPro?
Перевести нельзя, так как в VB нет возможности непосредственно работать с таблицами и курсорами. Попробуйте поэкспериментировать с ADO.
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470562
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FoxPro - нравится и даже очень - просто это задание для студентов - а им сказали ВБ... да тут и не надо таблиц... тут надо использовать текстовые файлы вместо таблиц... из них брать и в них писать...
Убеждать препода, что в фоксе это удобней - нет смысла - сами понимаете....
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470591
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открой таблицы через ADO и работай из VB
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470618
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще переписать заново. Что требуется в результате-то?
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470656
NE_Dimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чем тут Фокс и ВБ? Ему нужен украинец.

DimonNE
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470668
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Про Украинца сказано умно! Респект...

2 NNN

задание - выбрать из файла с Н записями одну, у которой среднее 3-х полей (жиры + белки + углеводы) наиболее близко к заданному значению L и только -то...
На фоксе - элементарно.. а вот хотят, чтобы в ВБ было... я же в ВБ не пишу...
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470834
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так подойдет? База - ms sql, вместо RECNO() вводим id, в SELECT создается новая таблица, с параметрами для ADODB.Command возиться неохота. Проверил в ворде, вроде все работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim L As Variant
Dim conn As Object
Dim comm As Object
L =  25 
Set conn = CreateObject( "ADODB.Connection" )
conn.Open  "Provider=SQLOLEDB.1 ;Persist Security Info=False;User ID=sa;Password=password;" & _
 "Initial Catalog=DatabaseName;Data Source=ServerName" 
Set comm = CreateObject( "ADODB.Command" )
comm.ActiveConnection = conn
comm.CommandText =  "SELECT TOP 1  id, belki, zhiri, uglevodi, ABS(" & L & _
 "- (belki+zhiri+uglevodi)/3 ) AS mat_middle INTO Result FROM workTable ORDER BY mat_middle"
comm.Execute
Set comm = Nothing
conn.Close
Set conn = Nothing


2NE_Dimon

В принципе можно меня и так обозвать
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470863
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 NNN

спасибо конечно.. мне-бы подошло.. но...
не стОит мешать туда АДО.. ибо я очень подозреваю, что препод сам такой глубины знаний не достиг... это НЕ для технической специальности задача.. для гуманитариев.. вот представь себе филолог такой код приносит.. дак препод же со стула упадет...
А если серьезно - нужно абстрагироваться от Баз данных все есть текстовые файлы.. с ними танцевать надо... геморрой блин...
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470883
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все понятно, плавали, знаем, Что называется, приходи вчера, точнее лет 8-10 назад.. Я уж и забыл, как в каком-нибудь QBasic'е файл считывать:( Хотя если два-три дня терпит, могу дома книжку поискать
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32470933
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 NNN

это как тебе захочется... я написал ему, ей то есть на фоксе - если не нравится - хай себе переводит на ВБ - в конце-концов ЕЕ же учат этому самому ВБ... надо и ей чем-нибудь заняться... В-)))
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32471354
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, это выглядит примерно так.
Блок Declarations
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Type Record
   Tovar As String *  20 
   Belki As Single
   Zhiri As Single
   Uglevodi As Single
End Type
Dim CustRec As Record, ResRec As Record
Dim L As Single, Min As Single, Tmp  As Single
Dim I As Integer, N As Integer, NumFile As Integer

Программка, которая создает файл с данными (закомментировано то, как я проверял, лень было писать 25 строк DATA, кстати будет ли DATA работать в Вижуале - не уверен)
Код: plaintext
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.
Sub Test1()
L =  50 
N =  25 
NumFile = FREEFILE
OPEN  "c:\temp\worktabl.dat"  FOR RANDOM AS NumFile LEN = LEN(CustRec)
FOR i =  1  TO N
   READ CustRec.Tovar, CustRec.Belki, CustRec.Zhiri, CustRec.Uglevodi
   PUT NumFile, i, CustRec
NEXT
CLOSE NumFile
DATA  "Tovar 1 ", 100 , 100 , 100 
...
DATA  "Tovar 25 ", 200 , 200 , 200 
'NumFile = FreeFile
'Open  "c:\temp\worktabl.dat"  For Random As NumFile Len = Len(CustRec)
'Randomize Timer
'For I =  1  To N
'   CustRec.Tovar = "Tovar" + Str$(I)
'   CustRec.Belki =  1000  * Rnd
'   CustRec.Zhiri = 1000 * Rnd
'   CustRec.Uglevodi =  1000  * Rnd
'   Put NumFile, I, CustRec
'Next
'Close NumFile
'Call Test2
End Sub

Собственно сама программа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Sub Test2()
L =  50 
Min =  3 .4E+ 38 
NumFile = FreeFile
Open  "c:\temp\worktabl.dat"  For Random As NumFile Len = Len(CustRec)
N = Len(NumFile) / Len(CustRec)
For I =  1  To N
   Get NumFile, I, CustRec
   Tmp = Abs((CustRec.Belki + CustRec.Zhiri + CustRec.Uglevodi) /  3  - L)
   If Tmp < Min Then Min = Tmp: ResRec = CustRec
Next
Close NumFile
NumFile = FreeFile
Open  "c:\temp\Result.dat"  For Random As NumFile Len = Len(ResRec)
Put NumFile,  1 , ResRec
Close NumFile
End Sub

Any questions?
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32471376
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 NNN

да уж не знаю как и благодарить!!!!!!
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32471763
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 NNN

не пояснишь что сие значит

Min = 3.4E+38
.
.

Tmp = Abs((CustRec.Belki + CustRec.Zhiri + CustRec.Uglevodi) / 3 - L)
If Tmp < Min Then Min = Tmp

зачем такая переменная 3,4 * 10 в степени 38 и с ней сравнивается модуль разницы????
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32471857
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Берем заведомо большое число (я там в книжке максимум для типа Single вычитал, округлил до десятых)
Код: plaintext
Min =  3 .4E+ 38 

Вычисляем разницу для текущей записи
Код: plaintext
Tmp = Abs((CustRec.Belki + CustRec.Zhiri + CustRec.Uglevodi) /  3  - L)

Если она меньше минимума, то присваиваем новое значение минимуму
и запоминаем значения записи
Код: plaintext
If Tmp < Min Then Min = Tmp : ResRec = CustRec 
...
Рейтинг: 0 / 0
VFP - > VB 6.0
    #32471897
????????
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вон оно что... просто сравниваться должно с L !!! которое в твоем примере = 50... т.е. среднее значение ищется наиболее близкое к L
но впрочем все понятно... еще раз спасибо!!!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP - > VB 6.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]