Практика для начинающих :D

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Die HarD
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 28.06.2004 (Пн) 15:55
Откуда: Спб.

Практика для начинающих :D

Сообщение Die HarD » 28.06.2004 (Пн) 22:19

:D

Так вот, нужно решить несколько задачек: Если кому интересно и не трудно, может поможете ? Нужны для поступления одного че-ка в МГУ. Заранее пасиба :)

Собственно задачки:

Задание 1. Три точки
На плоскости xOу три возможно совпадающие точки заданы своими координатами: (x1,y1), (x2,y2), (x3,y3).
Требуется выписать алгоритм для определения одного из 6 возможных случаев расположения этих точек:
1) все три точки совпадают; 2) совпадают ровно две точки; 3) все три точки лежат на одной прямой;
4) точки образуют остроугольный треугольник; 5) точки образуют прямоугольный треугольник; 6) точки образуют тупоугольный треугольник. Число логических операций должно быть при этом как можно меньше (так, выражение (x1=x2)and(y1=y2) содержит 3 логические операции). Количество арифметических операций при этом значения не имеет.

Задание 2. Кредит
На покупку жилья берется кредит N рублей сроком на K лет под P процентов годовых с ежемесячными выплатами. Каждый месяц выплачиваются проценты за невыплаченную часть кредита (P/12 процентов на остаток долга) плюс некоторая часть от основного долга. Получатель кредита хочет, чтобы в течение всех K лет каждый месяц выплаты были одинаковыми. Например, при N=100000, K=5, P=12 необходимо выплачивать по 2224 руб. 45 коп. ежемесячно.
Требуется на любом известном вам языке программирования написать программу
а) определяющую с точностью до 1 копейки минимальную сумму, которую можно выплачивать ежемесячно, чтобы погасить весь кредит вовремя;
б) если известно, какую сумму получатель кредита может платить ежемесячно, то программа должна определять с точностью до 1 рубля, какой максимальный кредит на тех же условиях может быть предоставлен. При наличии доступа к компьютеру подсчитайте с помощью вашей программы ответ для следующих данных:
а) 450000 рублей, 10 лет, 11%; б) 15000 рублей ежемесячно; 15 лет; 13%.


Задание 3. Массив
Пусть одномерный массив, состоящий из не более чем 1000 элементов, заполнен случайным образом целыми числами. На любом известном вам языке программирования написать фрагмент программы, печатающий только те значения элементов массива, которые встречаются более одного раза, но каждое такое значение должно быть напечатано один раз. Дополнительных массивов не использовать. Элементы массива не изменять и не менять местами.

Если кто сделает, то просьба - выложить тут или прислать :

mailto:a-leshka@list.ru

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 28.06.2004 (Пн) 23:16

Задание 1
1. Если x1=x2=x3 и y2=y3=y3...
2. блин чето-запутался..)))))))) (пиво блин)
3. Если (x1=x2 и x2=x3 и x1=x3) или (y1=y2 и y2=y3 и y1=y3) это если по горизонтали или по вертикали....
вотка - это зло....))) :D

Die HarD
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 28.06.2004 (Пн) 15:55
Откуда: Спб.

Сообщение Die HarD » 28.06.2004 (Пн) 23:47

А теперь - - на VB тоже самое ) с логикой все оки у меня, а вот с языками программирования - большая и круглая...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.06.2004 (Вт) 9:14

1. Все треугольники нормализовать (т.е. повернуть параллельно осям). Тогда проверка будет сводится к проверке равенства координат точек (кроме углов), а углы посчитать будет проще.
2. Э... А... Нет, не проснулся я еще :)
3. Если требований к быстродействию не предъявляется, то можно сделать примерно так.
Код: Выделить всё
Dim C As Long, I0 As Long, I As Long, S As String
'Массив Data - исходный массив
S = ";"
For I0 = LBound(Data) To UBound(Data)-1
  C = 0
  If InStr(S,";" & Trim$(Str$(Data(I0))) & ";") = 0 Then
    For I = I0+1 To UBound(Data)
      If Data(I0) = Data(I) Then C = C + 1
    Next I
    If C > 1 Then
      S = S & Trim$(Str$(Data(I0))) & ";"
      Print "Item #" & I0 & "; Value " & Data(I0)
    End If
  End If
Next I0
Lasciate ogni speranza, voi ch'entrate.

Die HarD
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 28.06.2004 (Пн) 15:55
Откуда: Спб.

Сообщение Die HarD » 30.06.2004 (Ср) 13:26

Что, ни у кого больше мыслей нет :D ?

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Сообщение Shurrik » 01.07.2004 (Чт) 11:24

1. Определяем три расстояния между тремя точками, т.е. r1=SQR((x1-x2)^2+(y1-y2)^2), r2 и r3 аналогично.
1.1 Все точки совпадают r1+r2+r3=0.
1.2 Две точки совпадают (r1+r2+r3)>0, a r1*r2*r3=0.
Для остальных случаев надо отсортировать r1,r2,r3 по возрастанию
IF r1>r2 THEN SWAP r1,r2
IF r2>r3 THEN SWAP r2,r3
IF r1>r2 THEN SWAP r1,r2
или любым другим способом.
1.4 Точки на одной линии r1+r2=r3
1.5 Остроугоьный треугольник (r1^2+r2^2)>r3^2
1.6 Прямоугоьный треугольник (r1^2+r2^2)=r3^2
1.7 Тупоугоьный треугольник (r1^2+r2^2)<r3^2
2. Пропущу
3. Тут придется сделать два вложенных цикла
Код: Выделить всё
CONST m=2000
DIM mm%(m)
FOR i=1 to m:mm(i)=100*RND:NEXT ' Создаем массив
FOR i=1 to m-1 ' Перебираем все элементы
pp=0 ' признак печати
FOR j=m to 1 STEP -1
  IF mm(i)=mm(j) AND j>i THEN
    pp=1:j=i-1 ' Есть совпадение
  END IF
  IF j=i AND pp=0 THEN
    EXIT FOR ' совпадений нет, закрыть цикл
  END IF
  IF mm(i)=mm(j) AND j<i THEN
    pp=0:EXIT FOR ' Совпадение уже печаталось
  END IF
NEXT j
IF pp=1 THEN PRINT pp
NEXT i
Колесо: Хочешь жить? Умей вертеться.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

    TopList