Помощь - Поиск - Пользователи - Календарь
Полная версия: Множества, записи и работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Spinne
Задали мне тут задачки, в которые я просто не врубаюсь.
Ну например -  Дано множество символов. Определить ,есть ли в данном множестве определенный символ. В учебнике множества не могу найти вообще.
Вот еще -  Из списка группы вывести фамилии и имена девочек. Как использовать записи?
Ну и последняя - Построить график функции ......... и записать его в файл.
oleg309
Знаешь почему нет ни от кого ни какой реакции?
AlaRic
Олег, хватит комментировать  >:( Либо помогай, либо молчи!!!
AlaRic
Множества, пример:
Код
var s:string;
for i:=1 to n do
if s[i] in ["определенный символ"] then write('Есть');
AlaRic
Записи:
Код
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
Круто!
Spinne
Как вводить с клавиатуры множество символов? Как ввести имена и пол?
AlaRic
Множество символов может быть константой.
Вводи имена и пол примерно так:

Код
for i:=1 to n do
with p[i] do
begin
write('Имя'); readln(name);
write('Пол'); readln(sex);
end;
Spinne
Склепал следующее, но показывает ошибку 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
Вот тебе исправленный код:

Код
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
А ты крутой перец!
Spinne
А как сделать чтобы вводить количество человек с клавиатуры?
Spinne
С множествами наклепал следующее:
Код
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
s[i] - символ, а 3 - число.

Мог бы написАть не Ошибка 26, а Type Mismatch. Хотя бы потому, что в Дельфи, например, это ошибка имеет номер 14
Spinne
Согласен, ошибка вышла. Но если ставлю символ, то пишет unknown identifier. То есть все символы надо ещё как-то прописать?
AlaRic
Вот вариант без множества:
Код
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
И всё-таки как вводить с клавиатуры количесиво человек?
AlaRic
Вариант с множеством:

Код
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
Ну тупой я! Ну не знаю куда его всунуть!
Вот последний вариант:
Код
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
Присваиваешь значение 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
Ага, так вот оно как........
Spinne
Итак, окончательный вариант множества:
Код
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
а как насчет записи в файл................
Spinne
Кой чего склепал:

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

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

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

Правда, так получится мелко и перевернуто, но уже хоть что-то smile.gif А можно еще его переврнуть чтобы правильно смотрелся, масштаб подобрать там, и вообще как-нибудь ближе к центру экрана разместить.
Spinne
А что значит BGI Error: Graphics not instalized (use InitGraph)?
trminator
Или не прописаны пути к драйверам, или они read-only. Надо не-read-only (почему, не знаю)
Spinne
А где именно эти драйвера?
И почему когда запускаю первый вариант со страницы http://pascal.dax.ru/?lessons&id=2&page=8 то на 15 строке после числа 320 выдаёт Type mismatch ?
trminator
Драйвера - в каталоге BGI
Spinne
А как насчёт задачи?

Код
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
И как записать график в файл?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.