Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ заполнение полей массива через Rand()

Автор: Jerry 11.11.2006 20:36

Здравствуйте.
значит есть у меня структура... а ней описаны номер, название, цена и вес препарата.

#include <stdio.h> 
#include <string.h>

const nbofstmax=1000;
int nbofst=10;
class apteka
{
public:
int number;
char name[15];
int price;
float weight;
apteka (int numb, char prep[15], int price0, float wght0)
{
number=numb;
strcpy(name, prep);
price=price0;
weight=wght0;
}

void printstud()
{
printf("%2d %-15s %3d %.2f\n", number, name, price, weight);
}

};


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

void initialize(apteka* stdar[])
{
stdar[0] = new apteka(1,"Analgin", 75, 180);
stdar[1] = new apteka(2,"Noshpa", 60, 285);
stdar[2] = new apteka(3,"Phalimint", 20, 176);
stdar[3] = new apteka(4,"Aspirin", 18, 187);
stdar[4] = new apteka(5,"Solpadein", 37, 300);
stdar[5] = new apteka(6,"Tabletki", 48, 179);
stdar[6] = new apteka(7,"Nazalvan", 67, 475);
stdar[7] = new apteka(8,"Vitamihi", 54, 107);
stdar[8] = new apteka(9,"Zelenka", 19, 171);
stdar[9] = new apteka(10,"Plastir", 76, 220);
printf("Database initialized successfully\n");
}


помогите написать функцию выбота случайного слова...
void GetWord ()
{
// Bu6op
retutn(char*)
}

for(i=0; i<10; i++)
{
stdar[i] = new apteka(i+1, GetWord(),rand()%100, rand()%250);
}

Автор: volvo 11.11.2006 20:47

Тебе нужна функция, которая будет выбирать случайное слово из какого-то массива данных, или генерировать какую-либо (бредовую, лишенную всякого смысла) последовательность случайной длинны, состоящую из латинских букв?

Автор: Jerry 11.11.2006 21:04

генерировать какую-либо (бредовую, лишенную всякого смысла) последовательность случайной длинны, состоящую из латинских букв

Автор: Алена 11.11.2006 21:40

char *GetWord ()
{
int sz = (rand() % 10) + 5;
char *s = new char[sz];
for(int i = 0; i < sz; i++) s[i] = (rand() % 26) + 'a';

s[sz] = '\0';
s[0] = toupper(s[0]);

return s;
}

int main() {

for(int i = 0; i < 5; ++i) {

char *s = GetWord();

puts(s);

delete s; // Не забывай освобождать память, иначе будут утечки ...

}
return 0;
}

Автор: Jerry 12.11.2006 0:24

заполнить поля массива из 10 aptek ...
...
(rand() % 10) + 5 -что оно делает?
toupper - если cисмвол -- лат. буква, то преобразовать cимвол к прописной букве... это точно оно? о.О

Автор: Алена 12.11.2006 0:30

Цитата
(rand() % 10) + 5 -что оно делает?
Генерирует случайное число в интервале от 5 до 14 (я почему-то подумала, что если будет пустая строка, длиной 0, это тебя может не устроить... Я не права?)

Цитата
toupper - если cисмвол -- лат. буква, то преобразовать cимвол к прописной букве... это точно оно?
Если верить документации, то да... Если не верить - зачем программировать?

Цитата
заполнить поля массива из 10 aptek ...
Ты сначала описание этого массива покажи, я не телепат чтобы предполагать, как он описан...

Автор: Jerry 12.11.2006 0:49

массив... инициализируем мы его в GetWord() походу.

char n[10] = {Analgin, Noshpa, Phalimint, Aspirin, Solpadein, Tabletki, Plastir, Zelenka, Vitamini, Nazalvan};

Автор: Алена 12.11.2006 0:56

Однако, на вопрос, заданный в посте №2 ты ответила, что тебе нужно составлять свои слова, а не выбирать из готовых? Это как понимать?

Кстати, твой код, приведенный чуть выше не будет компилироваться. Что содержит массив? Символы? Строки? По типу вроде бы должны быть символы, тогда что такое Analgin?

Автор: Jerry 12.11.2006 1:05

не знаю я.
я вообще не пойму чего от меня препод хочет. заменить void initialize ()... чтоб не прописывать кадждый эл-т отдельно, а выводить случайным словом... для этого надо вообще прописывать то что выводить потом.?
dry.gif

Автор: Алена 12.11.2006 1:10

Я показала, КАК делать случайную строку. ЧТО с ней делать потом - твое дело. Хочешь - удаляй, хочешь - передавай в конструктор класса...

Если же ты будешь случайно выбирать слова из заранее заданного массива - тебе придется еще позаботиться о том, чтобы не было повторно выбрано то же самое слово... Это усложнит программу...

Автор: Jerry 13.11.2006 0:38

спасибо за помощ