![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
HuKTO |
![]()
Сообщение
#1
|
Гость ![]() |
Цитата Подсчитать число точек, находящихся внутри круга, радиусом R с центром в начале координат, координаты заданы массивами x(100), y(100). Никак не врублюсь в паскаль. Вроде задача не трудная, а как сделать - хз. Сам алгоритм вроде просматривается, но формулу по которой будут точки считаться внутри круга где брать... без понятия. Вообщем помогите пжл с этой нелегкой(для меня) задачей. Можно с коментариями неболишими..может чего-нибудь да пойму. |
Atos |
![]()
Сообщение
#2
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата формулу по которой будут точки считаться внутри круга где брать... без понятия. если x[i]*x[i]+y[i]*y[i]< R*R, то i-я точка лежит внутри круга |
HuKTo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(Atos @ 11.04.05 5:27) если x[i]*x[i]+y[i]*y[i]< R*R, то i-я точка лежит внутри круга Спасибо за формулу, я правда все-равно не понял как она работает. Можете объяснить? И если не сложно напишите код программы целиком, а то у меня не получилось, а скоро уже идти её(задачу) показывать... Заранее спасибо. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Вот функция, проверяющая лежит ли i-я точка внутри круга:
Код Function isInside(i: integer): boolean; begin isInside := (sqr(x[i]) + sqr(y[i])) < sqr(R) end; В цикле для каждой точки вызываешь эту ф-ю и если ее значение = True то увеличиваешь счетчик... Где именно проблема? |
Atos |
![]()
Сообщение
#5
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Мда... Ладно. Поясняю. В каком случае точка лежит внутри круга? Тогда, когда расстояние от точки до начала координат меньше радиуса круга. Как вычисляется это расстояние? Его квадрат равен сумме квадратов координат точки по 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 меня уже опередил с ответом ![]() Сообщение отредактировано: Atos - 11.04.2005 12:53 |
HuKTO |
![]()
Сообщение
#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 результата. |
Guest |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата(Atos @ 11.04.05 12:50) Мда... Ладно. Поясняю. Насчет программы: Мне нужно именно с использованием функции (function). И в твоей задаче получается, что надо каждую точку вводить собственноручно. На счет программирования вообще: да нет, мне как раз программирование интересно. Иначе бы не пошел на такую специальность. В прошлом году в ку бэсике и визуал бэсике вообще проблем не было(хоть и программа конечно другая была, полегче...но всеже), да и Php мне когда-то очень нравился...очень удобная штука, но сайтами я больше не увлекаюсь довольно давно...так что и оттуда все забыл. А паскаль не знаю не дается и все. Щас, кстати, ещё тему создам... новая задача...тоже вообще не понял. И с этой ещё разобратся надо(надеюсь на вашу помощь). |
volvo |
![]()
Сообщение
#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. |
HuKTO |
![]()
Сообщение
#9
|
Гость ![]() |
Странно, но опять эта ошибка - "Integer or real expression expected".
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Да, это мой глюк.
![]() Код isInside:=(sqr(x[i])*sqr(y[i]))<sqr(R); |
HuKTO |
![]()
Сообщение
#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; |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата(HuKTO @ 12.04.05 10:49) Смотри, у тебя в задачи I обозначена получается тоже локально? Но если её описать заранее как интежер, то задача запускается, но точек в круге при любом раскладе - 100 Так в том-то и дело, что если одна и та же переменная описана И глобально, И локально, то везде, где видимо локальное описание, будет использоваться локальная переменная, во всех остальных случаях - используется глобальная. У тебя же ГЛОБАЛЬНАЯ переменная описана просто не была, а то, что ты описал переменную внутри процедуры, так она же просто не существует до тех пор, пока ты в эту процедуру не войдешь, и обращаться к ней извне просто нельзя... Кстати, у меня I не описывается локально, а передается как параметр, а это разные вещи... Цитата(HuKTO @ 12.04.05 10:49) у меня же по-идее координаты массивами заданы, зачем их вводить. Не путай, они у тебя не заданы, а описаны. То есть под них выделено место. А значения им кто будет присваивать? Тка что все-таки придется поставить этот цикл (который ты видел у Atos-а) :yes: |
HuKTO |
![]()
Сообщение
#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. Если и то и то верно то добавляем число в массив и переходим к след. числу, если же нет пропускаем и все-равно переходим. |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата(HuKTO @ 18.04.05 13:04) я создавал тему, правда щас её на нашел А вот если бы зарегистрировался, тебе был бы доступен просмотр всех своих сообщений... Цитата(HuKTO @ 18.04.05 13:04) Если не трудно напиши код. Нетрудно, но код полностью я писАть не буду. Кстати, это уже не относится к первому заданному вопросу, поэтому ищи созданную тобой тему и продолжай обсуждение там.P.S. И, на будущее, давай более осмысленные названия темам, "Задача на функцию (или процедуру)" - таких сотни, и не разберешь, где что... |
unFair |
![]()
Сообщение
#15
|
Гость ![]() |
Цитата(volvo @ 18.04.05 14:30) А вот если бы зарегистрировался, тебе был бы доступен просмотр всех своих сообщений... Все учел, зарегился. Можно продолжить обсуждение в соседней теме ;) |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Читай мой предыдущий ответ внимательно... Здесь обсуждение закончилось. Одна тема - один вопрос.
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:12 |