Версия для печати темы
Форум «Всё о Паскале» _ Задачи _ Множества, записи и работа с файлами
Автор: 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;
Правда, так получится мелко и перевернуто, но уже хоть что-то
А можно еще его переврнуть чтобы правильно смотрелся, масштаб подобрать там, и вообще как-нибудь ближе к центру экрана разместить.
Автор: 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
И как записать график в файл?