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

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

Форум «Всё о Паскале» _ Задачи _ Множества, записи и работа с файлами

Автор: Spinne 13.12.2003 15:54

Задали мне тут задачки, в которые я просто не врубаюсь.
Ну например -  Дано множество символов. Определить ,есть ли в данном множестве определенный символ. В учебнике множества не могу найти вообще.
Вот еще -  Из списка группы вывести фамилии и имена девочек. Как использовать записи?
Ну и последняя - Построить график функции ......... и записать его в файл.

Автор: oleg309 13.12.2003 17:23

Знаешь почему нет ни от кого ни какой реакции?

Автор: AlaRic 13.12.2003 17:38

Олег, хватит комментировать  >:( Либо помогай, либо молчи!!!

Автор: AlaRic 13.12.2003 17:41

Множества, пример:

Код
var s:string;
for i:=1 to n do
if s[i] in ["определенный символ"] then write('Есть');

Автор: AlaRic 13.12.2003 17:45

Записи:

Код
type people=record
familia:string[20];
name:string[10];
sex:char;
end;
var p:people;
...
...
for i:=1 to n do
begin
if sex='ж' then write(p.familia[i]',' p.name[i]);

Автор: Spinne 13.12.2003 18:07

Круто!

Автор: Spinne 14.12.2003 18:55

Как вводить с клавиатуры множество символов? Как ввести имена и пол?

Автор: AlaRic 14.12.2003 22:52

Множество символов может быть константой.
Вводи имена и пол примерно так:

Код
for i:=1 to n do
with p[i] do
begin
write('Имя'); readln(name);
write('Пол'); readln(sex);
end;

Автор: Spinne 15.12.2003 0:09

Склепал следующее, но показывает ошибку 121. Что делать?

Код
program Lab;
type people=record
name:string[10];
sex:char;
end;
var p:people;
i:integer;
BEGIN
for i:=1 to 5 do
with p[i] do
begin
write('имя'); readln(name);
write('пол'); read(sex);
end;
for i:=1 to 5 do
begin
 if sex='ж' then writeln(p.name[i]);
end;
END.

Автор: AlaRic 15.12.2003 0:33

Вот тебе исправленный код:

Код
program Lab;
const n=5;
type people=record
name:string[10];
fio:string[10];
sex:char;
end;
var p:array[1..n] of people;
i:integer;
BEGIN
for i:=1 to n do
begin
write('фам ');readln(p[i].fio);
write('имя '); readln(p[i].name);
write('пол '); readln(p[i].sex);
end;
for i:=1 to n do
if p[i].sex='1' then begin writeln(p[i].fio); writeln(p[i].name);  end;
end.

Автор: Spinne 15.12.2003 0:36

А ты крутой перец!

Автор: Spinne 15.12.2003 0:56

А как сделать чтобы вводить количество человек с клавиатуры?

Автор: Spinne 15.12.2003 23:34

С множествами наклепал следующее:

Код
program Lab;
const n=5;
type M=set of 0..9;
var  s:string;
i:INTEGER;
BEGIN
for i:=1 to 5 do
begin
write('число');readln(s);
end;
for i:=1 to 5 do
if s[i] in [3] then writeln('есть!');
end;
END.

Но выдаёт ошибку 26.
А как в записях нужно вставить надпись типа
Код
var n:real;
write('введите количество человек');
read(n);

чтобы вводить количество человек с клавиатуры?

Автор: trminator 15.12.2003 23:56

s[i] - символ, а 3 - число.

Мог бы написАть не Ошибка 26, а Type Mismatch. Хотя бы потому, что в Дельфи, например, это ошибка имеет номер 14

Автор: Spinne 16.12.2003 0:18

Согласен, ошибка вышла. Но если ставлю символ, то пишет unknown identifier. То есть все символы надо ещё как-то прописать?

Автор: AlaRic 16.12.2003 0:32

Вот вариант без множества:

Код
program Lab;
const n=5;
var  s:array[1..n] of char;
i:INTEGER;
BEGIN
for i:=1 to 5 do
begin
write('число ');readln(s[i]);
end;
for i:=1 to 5 do
if s[i] in ['3'] then writeln('есть!');
END.

Автор: Spinne 16.12.2003 0:40

И всё-таки как вводить с клавиатуры количесиво человек?

Автор: AlaRic 16.12.2003 0:45

Вариант с множеством:

Код
program Lab;
const n=5;
var  s:array[1..n] of char;
a:set of char;
i:integer;
BEGIN
a:=['1','2','3','4','5','6','7','8','9','0'];
for i:=1 to n do
begin
write('число ');readln(s[i]);
end;
for i:=1 to n do
if s[i] in a then writeln('есть!');
END.


2) В чем проблема?
var d:byte;
writeln('кол-во ');
readln(d);
for i:=1 to d do
.......и т.д.

Автор: Spinne 16.12.2003 1:20

Ну тупой я! Ну не знаю куда его всунуть!
Вот последний вариант:

Код
program Lab;
const n=5;
type people=record
name:string[10];
familia:string[20];
sex:char;
end;
var
p:array[1..n] of people;
i:integer;
BEGIN
for i:=1 to n do
begin
write('фамилия-'); readln(p[i].familia);
write('имя-'); readln(p[i].name);
write('пол-'); readln(p[i].sex);
end;
for i:=1 to n do begin
if p[i].sex='¦' then writeln('имена:',p[i].name,' ',p[i].familia);  end;
end.

Ну куда его совать?

Автор: AlaRic 18.12.2003 21:04

Присваиваешь значение n заведомо большее чем нужно. Например:

Код
program Lab;
const n=500;
type people=record
name:string[10];
familia:string[20];
sex:char;
end;
var
p:array[1..n] of people;
i,s:integer;
BEGIN
writeln('ввести кол-во');
readln(s);
for i:=1 to s do  
begin
write('фамилия-'); readln(p[i].familia);
write('имя-'); readln(p[i].name);
write('пол-'); readln(p[i].sex);
end;  
for i:=1 to s do begin  
if p[i].sex='¦' then writeln('имена:',p[i].name,' ',p[i].familia);  end;
end.

Автор: Spinne 18.12.2003 22:00

Ага, так вот оно как........

Автор: Spinne 18.12.2003 22:37

Итак, окончательный вариант множества:

Код
program Lab7;
const n=255;
type M=set of 0..n;
var  s:string;
i,b:integer;
a:char;
BEGIN
write('введите воличество символов-'); readln(B);
write('введите искомый символ-'); readln(a);
for i:=1 to b do
begin
write('символ-');readln(s[i]);
end;
for i:=1 to b do
if s[i]=a then writeln('есть!');
END.

Автор: Spinne 18.12.2003 22:47

а как насчет записи в файл................

Автор: AlaRic 18.12.2003 23:26

http://pascal.dax.ru/?lessons&id=1&page=20

Автор: Spinne 20.12.2003 20:33

Кой чего склепал:

Код
program Lab9;
var
T: Text;
S: string;
begin
write('введите путь к файлу:');
readln(S);
Assign(T,S);
{$I-}
Reset(T);
{$I+}
if IOResult<>0 then
begin
 write('файл не найден!');
 halt;
end;
ReWrite(T);
write('введите функцию');
read(S);
Write(T,S);
Close(T);
end.

Правда, не совсем понимаю условие - построить график функции. Это чтобы был чертёж?

Автор: oleg309 20.12.2003 22:08

Цитата
Правда, не совсем понимаю условие - построить график функции. Это чтобы был чертёж?

Да

Автор: Spinne 20.12.2003 22:11

И как же мне его сделать?

Автор: oleg309 20.12.2003 22:13

В графическом режиме естестно

Автор: trminator 20.12.2003 22:48

Oleg309, понятно вроде, что в текстовом плохо выйдет.
Spinne, пусть есть функция f(x). Выберем пока для простоты масштаб одна единица = одному пикселу. Дальше просто проходишь по всем пикселам "в ширину" и вычисляешь значение функции

Код

for i:=1 to 640 do begin
 j:=f(x); lineto(i, j)
end;

Правда, так получится мелко и перевернуто, но уже хоть что-то smile.gif А можно еще его переврнуть чтобы правильно смотрелся, масштаб подобрать там, и вообще как-нибудь ближе к центру экрана разместить.

Автор: Spinne 20.12.2003 23:20

А что значит BGI Error: Graphics not instalized (use InitGraph)?

Автор: trminator 20.12.2003 23:23

Или не прописаны пути к драйверам, или они read-only. Надо не-read-only (почему, не знаю)

Автор: Spinne 20.12.2003 23:41

А где именно эти драйвера?
И почему когда запускаю первый вариант со страницы http://pascal.dax.ru/?lessons&id=2&page=8 то на 15 строке после числа 320 выдаёт Type mismatch ?

Автор: trminator 21.12.2003 15:36

Драйвера - в каталоге BGI

Автор: Spinne 21.12.2003 15:44

А как насчёт задачи?

Код
program f;
  uses graph;
  var gd, gm: integer;
      x,y: real;
begin
  gd:=detect;
  initgraph(gd, gm, ‘c:/ bp’);
  SetColor(5);
  Line(0, 240, 640, 240);
  Line(320, 0, 320, 480);
  x:=-20;
  While x<=20 do
    begin
        y:=-Sqr(x);
        PutPixel(x *5 + 320, y*5 +240, 15);
        x:=x+ 0.01;
        end;
end.

Работает только если ставлю x,y:integer, а в 3 строке снизу x:=x+1
Иначе Type missmatch
И вообще, зачем множить на 5? Только для того чтобы график был шире?

Автор: Spinne 21.12.2003 16:57

И как записать график в файл?