IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Число точек, находящихся внутри круга, (использовать функции)
сообщение
Сообщение #1


Гость






Цитата
Подсчитать число точек, находящихся внутри круга, радиусом R с центром в начале координат, координаты заданы массивами x(100), y(100).


Никак не врублюсь в паскаль. Вроде задача не трудная, а как сделать - хз. Сам алгоритм вроде просматривается, но формулу по которой будут точки считаться внутри круга где брать... без понятия. Вообщем помогите пжл с этой нелегкой(для меня) задачей. Можно с коментариями неболишими..может чего-нибудь да пойму.
 К началу страницы 
+ Ответить 
 
Closed Topic Открыть новую тему 
Ответов(1 - 15)
сообщение
Сообщение #2


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Цитата
формулу по которой будут точки считаться внутри круга где брать... без понятия.
если x[i]*x[i]+y[i]*y[i]< R*R, то i-я точка лежит внутри круга
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(Atos @ 11.04.05 5:27)
если x[i]*x[i]+y[i]*y[i]< R*R, то i-я точка лежит внутри круга

Спасибо за формулу, я правда все-равно не понял как она работает. Можете объяснить? И если не сложно напишите код программы целиком, а то у меня не получилось, а скоро уже идти её(задачу) показывать...

Заранее спасибо.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Вот функция, проверяющая лежит ли i-я точка внутри круга:
Код
Function isInside(i: integer): boolean;
begin
 isInside := (sqr(x[i]) + sqr(y[i])) < sqr(R)
end;

В цикле для каждой точки вызываешь эту ф-ю и если ее значение = True то увеличиваешь счетчик... Где именно проблема?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Мда... Ладно. Поясняю. В каком случае точка лежит внутри круга? Тогда, когда расстояние от точки до начала координат меньше радиуса круга. Как вычисляется это расстояние? Его квадрат равен сумме квадратов координат точки по x и по y (ТЕОРЕМА ПИФАГОРА!!). Следовательно, формула звучит так:
"если квадрат расстояния до центра координат меньше квадрата радиуса круга"

Вот код...
Код
type Arr=array[1..100] of integer;

var i,t,n:byte;
   R:word;
   x,y:Arr;
begin
t:=0;
write('Vvedite radius kruga '); readln(R);
write('Vvedite colichestvo tochek '); readln(n);

for i:=1 to n do
 begin
 write(i,' tochka: x= '); read(x[i]); write(' y= '); readln(y[i]);
 end;
for i:=1 to n do if x[i]*x[i]+y[i]*y[i] < R*R then inc(t);
writeln('Colichestvo tochek vnutri kruga ravno ',t);
readln;
end.


Вообще же лучше самостоятельно начать разбираться в Паскале: видимо, у тебя с этим проблемы. Пойми, что все программы за тебя вряд ли напишут, а если и напишут, то не гарантированно без ошибок. На самом деле программирование - очень интересная вещь! и вовсе не страшная :D и в жизни всегда пригодится. Если захочешь разобраться в нём не только ради сдачи зачёта, здесь всегда будут рады помочь тебе и дать совет.

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

З.Ы. О, пока писал,volvo меня уже опередил с ответом smile.gif

Сообщение отредактировано: Atos -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата(volvo @ 11.04.05 12:29)
Вот функция, проверяющая лежит ли i-я точка внутри круга:
Код
Function isInside(i: integer): boolean;
begin
 isInside := (sqr(x[i]) + sqr(y[i])) < sqr(R)
end;

В цикле для каждой точки вызываешь эту ф-ю и если ее значение = True то увеличиваешь счетчик... Где именно проблема?

Да сам не знаю где проблема...наверное в моей голове. Ну вообщем если делать след:
Код
uses crt;
function isInside(i:integer):boolean;
var
r,x,y,kol:integer;

begin
kol:=0;
writeln('Radius: ');readln(r);
isInside:=(sqr(x)*sqr(y))<sqr(R);
for i:=1 to 100 do
if isInside(i)=true then inc(kol)
end;
var
a1:integer;
begin
writeln(isInside(r,x,y,kol);
end.

То он выдает ошибку на параметрах isInside, т.к. я их якобы не задавал вообще. Вначале по-идее также должно быть
Код
Type mass=array[1..100] of integer;
var
x,y: mass;

Но в таком случае он выдает ошибку, где написано что-то вроде "вам нужно описать х и y через integer либо через real". Пробывал и так и сяк - 0 результата.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(Atos @ 11.04.05 12:50)
Мда... Ладно. Поясняю.

Насчет программы:
Мне нужно именно с использованием функции (function). И в твоей задаче получается, что надо каждую точку вводить собственноручно.
На счет программирования вообще: да нет, мне как раз программирование интересно. Иначе бы не пошел на такую специальность. В прошлом году в ку бэсике и визуал бэсике вообще проблем не было(хоть и программа конечно другая была, полегче...но всеже), да и Php мне когда-то очень нравился...очень удобная штука, но сайтами я больше не увлекаюсь довольно давно...так что и оттуда все забыл. А паскаль не знаю не дается и все. Щас, кстати, ещё тему создам... новая задача...тоже вообще не понял. И с этой ещё разобратся надо(надеюсь на вашу помощь).
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






HuKTO, смотри что происходит: Ты описываешь функцию, и внутри нее - локальную переменную R, правда? Но ведь эта переменная недоступна ВНЕ функции, откуда ты пытаешься к ней обратиться. Так что объявляй ее глобально, еще перед функцией...

И второе... Функция IsInside выполняет строго определенную задачу: Выясняет, находится ли точка под номером i внутри круга. Зачем же взваливать на эту же функцию еще и ввод радиуса и подсчет количества точек? Тогда она вообще тебе не нужна, как функция, и тебе лучше перенести все в основную программу.

Вот что тебе нужно:
Код
uses crt;
const n = 100;
var
 i, r, kol:integer;
 x, y: array[1 .. n] of integer; { У тебя же массив координат по условию }

function isInside(i:integer):boolean;
begin
 isInside:=(sqr(x)*sqr(y))<sqr(R);
end;

var
begin
 writeln('Radius: ');readln(r);

 { Здесь тебе надо будет добавить ввод самих координат }

 kol:=0;
 for i:=1 to 100 do
   if isInside(i) then inc(kol) { <--- Когда работаешь с Boolean,
то "= True" можно не писать, компилятор это поймет :) }

 writeln('точек в круге:', kol);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Странно, но опять эта ошибка - "Integer or real expression expected".
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Да, это мой глюк. sad.gif Поменяй строку в функции вот на эту:
Код
 isInside:=(sqr(x[i])*sqr(y[i]))<sqr(R);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






2Volvo: Смотри, у тебя в задачи I обозначена получается тоже локально? Но если её описать заранее как интежер, то задача запускается, но точек в круге при любом раскладе - 100
И в 2-е - на счет ввода координат - это ты имеешь ввиду как у Atos'a
Код
for i:=1 to n do
begin
write(i,' tochka: x= '); read(x[i]); write(' y= '); readln(y[i]);
end;
? Но у меня же по-идее координаты массивами заданы, зачем их вводить.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(HuKTO @ 12.04.05 10:49)
Смотри, у тебя в задачи I обозначена получается тоже локально? Но если её описать заранее как интежер, то задача запускается, но точек в круге при любом раскладе - 100

Так в том-то и дело, что если одна и та же переменная описана И глобально, И локально, то везде, где видимо локальное описание, будет использоваться локальная переменная, во всех остальных случаях - используется глобальная. У тебя же ГЛОБАЛЬНАЯ переменная описана просто не была, а то, что ты описал переменную внутри процедуры, так она же просто не существует до тех пор, пока ты в эту процедуру не войдешь, и обращаться к ней извне просто нельзя...

Кстати, у меня I не описывается локально, а передается как параметр, а это разные вещи...

Цитата(HuKTO @ 12.04.05 10:49)
у меня же по-идее координаты массивами заданы, зачем их вводить.

Не путай, они у тебя не заданы, а описаны. То есть под них выделено место. А значения им кто будет присваивать? Тка что все-таки придется поставить этот цикл (который ты видел у Atos-а) :yes:
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






2Volvo:
Наконец добрался до сюда. Спасибо за советы. Вот такая программа в итоге получается:
Код
uses crt;
const n=100;
Type arr=array[1..100] of integer;

var
i,r,kol:integer;
x,y:arr;
function isInside(i:integer):boolean;

begin
isInside:=(sqr(x[i])+sqr(y[i]))<sqr(R);
end;
begin
clrscr;
writeln('Chemy raven radius?');
readln(R);
for i:=1 to n do
begin
x[i]:=i;
y[i]:=i;
end;
kol:=0;
for i:=1 to 100 do
if isInside(i) then inc(kol);
writeln('Kol. to4ek vnutri kruga=',kol); readln;
end.

Все вроде работает. Но с процедурами(я создавал тему, правда щас её на нашел..) я так и не разобрался. Если не трудно напиши код. Я сам принцип понял кое-как но ничего не выходит все-равно(программа: даны натур. числа k и n. составить програм. формирования массива А, элементами которого являются числа, сумма цифр которых равна k и к-ые не больше N).
Идет по идее рандом чисел, и каждое число проходит проверку: равна ли сумма его цифр K и не больше ли они N. Если и то и то верно то добавляем число в массив и переходим к след. числу, если же нет пропускаем и все-равно переходим.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата(HuKTO @ 18.04.05 13:04)
я создавал тему, правда щас её на нашел

А вот если бы зарегистрировался, тебе был бы доступен просмотр всех своих сообщений...

Цитата(HuKTO @ 18.04.05 13:04)
Если не трудно напиши код.
Нетрудно, но код полностью я писАть не буду. Кстати, это уже не относится к первому заданному вопросу, поэтому ищи созданную тобой тему и продолжай обсуждение там.

P.S. И, на будущее, давай более осмысленные названия темам, "Задача на функцию (или процедуру)" - таких сотни, и не разберешь, где что...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата(volvo @ 18.04.05 14:30)
А вот если бы зарегистрировался, тебе был бы доступен просмотр всех своих сообщений...

Все учел, зарегился. Можно продолжить обсуждение в соседней теме ;)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Читай мой предыдущий ответ внимательно... Здесь обсуждение закончилось. Одна тема - один вопрос.
 К началу страницы 
+ Ответить 

Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 7.09.2025 14:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name