Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Случайная выборка строки из файла для Web игры (http://forum.oszone.net/showthread.php?t=230483)

Чайниг 15-03-2012 20:34 1880220

Случайная выборка строки из файла для Web игры
 
Суть в том что есть ID вещей,он находится в .txt блокноте,можно ли написать такой рандом который будет сам выбирать этот id и выдавать эту вещь пользователью.
Можно огрызки кода,или пример мне все подойдет.

Delirium 16-03-2012 01:39 1880380

считываешь файл в память, берешь количество строк. СОздаешь RAND число (http://www.cplusplus.com/reference/c.../cstdlib/rand/ ) в диапазоне от 1 до количества строк. Считываешь полученную строку и отдаешь пользователю.

Drongo 16-03-2012 15:40 1880702

Чайниг, Вот.
В ID хранится сгенерированое число от 1 до количества строк из файла.
В CountLine хранится общее количество строк из файла. Хотя можно и напрямую, без использования этой переменной
Код:

...
  int ID = 1 + rand() % lst->Count;
...

примерно так.
Код:

...
#include <cstdlib>
...
...
...
  TStringList *lst = new TStringList;
  lst->LoadFromFile("ПУТЬ_К_ВАШЕМУ_ТХТ_ФАЙЛУ_С_ID");
  int CountLine = lst->Count;
  srand(time(0));
  int ID = 1 + rand() % CountLine;
...


Чайниг 16-03-2012 22:20 1880952

Допустим вот у меня есть код,

Код:

#include< iostream >
#include< cstdlib >
#include< ctime >
#define L 10
#define N 3
using namespace std;
int main()
{
        int r;
        int sum;
        float sred;
        time_t t;

        srand((unsigned) time(&t));

        for(int i=1; i <= N; i++)
        {
                cout << "Sluchainie chisla: ";
                sum = 0;
                for(int j = 1; j <= L; j++)
                {
                        r = rand() % 10 + 1;
                        cout << r << " ";
                        sum += r;
                }
                sred = (float)sum / L;
                cout << "Sred arifm = " << sred << endl;
        }
        system("pause");
        return 0;
}


выводит 3 любых числа из 10 ID,
куда мне впихнуть код



Цитата:

Цитата Drongo
примерно так.
Код:
...
#include <cstdlib>
...
...
...
TStringList *lst = new TStringList;
lst->LoadFromFile("ПУТЬ_К_ВАШЕМУ_ТХТ_ФАЙЛУ_С_ID");
int CountLine = lst->Count;
srand(time(0));
int ID = 1 + rand() % CountLine;
... »


Drongo 17-03-2012 14:36 1881201

Чайниг, Вообще-то у меня к графическому интерфейсу был вариант. У вас консольный вариант.

Чайниг 17-03-2012 18:57 1881324

Drongo,дайте тогда код к вашему варианту,он скорее всего графическим будет.
эта версия для бета теста

Drongo 18-03-2012 16:25 1881796

Компоненты: Button1, Button2, OpenDialog1, Label1

Код:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <cstdlib>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TStringList *lst;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
// Создаём список------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  lst = new TStringList();
}
// Открываем текстовый файл и грузим в список lst----------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(OpenDialog1->Execute()){
      lst->LoadFromFile(OpenDialog1->FileName);
      Button2->Enabled = true;
    }
}
// Генерируем номер строки---------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  srand(time(0));
  Label1->Caption = String("Случайная строка: ") + 1 + rand() % lst->Count;
}
// Освобождаем память при выходе---------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete lst;
}
//---------------------------------------------------------------------------


Чайниг 18-03-2012 20:24 1881945

Drongo, а в MVS это какое расширение файла?

ferget 18-03-2012 21:21 1881980

это для C++ builder

Drongo 19-03-2012 14:27 1882412

Цитата:

Цитата ferget
это для C++ builder »

Да вроде и для MVS сгодится, обработчики у кнопок одни.

Чайниг, Я не пользуюсь Visual Studio, но думаю создать новый проект и накидать компонентов труда составить не сложно. А дальше обработчики у кнопок OnClick и у формы OnCreate и OnDestroy, вставляете код из этих функций что я привёл в листинге и компилируете проект.

Чайниг 19-03-2012 21:39 1882734

ясно.спасибо


Время: 18:41.

Время: 18:41.
© OSzone.net 2001-