Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы ОФК. Начало.doc
Скачиваний:
30
Добавлен:
23.03.2015
Размер:
986.11 Кб
Скачать

Лабораторна робота № 4

Тема роботи.Алгоритмізація й використання керуючих структур в Java.

Ціль роботи.Організації розгалуження в Java.

Короткі теоретичні відомості

Оператор циклу while - цикл із передумовою

while(умова)

оператор;

Поки умова зберігає значення true - у циклі виконується оператор, інакше - дія циклу припиняється. Якщо умова із самого початку false, цикл відразу припиняється, і тіло циклу не виконається жодного разу.

Цикл while звичайно застосовують замість циклу for у тому випадку, якщо умови продовження досить складні. На відміну від циклу for у цьому випадку немає формально заданого лічильника циклу, і не відбувається його автоматичної зміни. За це відповідає програміст. Хоча цілком можливе використання як циклу for замість while, так і навпаки. Багато програмістів воліють користуватися тільки циклом for як найбільш універсальним.

Приклад:

i=1;

x=0;

while(i<=n){

x+=i;//еквівалентно x=x+i;

i*=2;//еквівалентно i=2*i;

};

Оператор циклу do...while - цикл із постумовою

do

оператор;

while(умова);

Якщо умова приймає значення false, цикл припиняється. Тіло циклу виконується до перевірки умови, тому воно завжди виконається хоча б один раз.

Приклад:

int i=0;

double x=1;

do{

i++; // i=i+1;

x*=i; // x=x*i;

}

while(i<n);

Якщо за допомогою оператора do...while організується цикл із речовинним лічильником або іншою перевіркою на рівність або нерівність чисел типу float або double, у нього виникають точно такі ж проблеми, як описані для циклів for і while.

При необхідності організувати нескінченний цикл (з виходом зсередини тіла циклу за допомогою оператора переривання) часто використовують наступний варіант:

do{

}

while(false);

Програма 1. Переклад чисел з десяткової системи числення у двійкову й шістнадцятирічну.

.

  1. public class Trans {

  2. public static String fromdectobin(int x){

  3. String res="";

  4. short q = 0;

  5. while(x>0){

  6. q=(short)(x%2);

  7. x/=2;

  8. res=q+res;

  9. }

  10. return res;

  11. }

  12. public static String fromdectohex(float x){

  13. String res="";

  14. short q = 0;

  15. int c = 2;

  16. while(c>0){

  17. q=(short)(16*(x/16-Math.floor(x/16)));

  18. c=(int) Math.floor(x/16);

  19. x=c;

  20. if(q<10){

  21. res=q+res;

  22. }else{

  23. switch(q){

  24. case 10:

  25. res="A"+res;

  26. break;

  27. case 11:

  28. res="B"+res;

  29. break;

  30. case 12:

  31. res="C"+res;

  32. break;

  33. case 13:

  34. res="D"+res;

  35. break;

  36. case 14:

  37. res="E"+res;

  38. break;

  39. case 15:

  40. }

  41. res="F"+res;

  42. break;

  43. }}

  44. }

  45. return res;

  46. }

  47. public static void main(String[] args) {

  48. System.out.println(fromdectobin(90367));

  49. System.out.println(fromdectohex(90367));

  50. }

У даній програмі наведені два методи: один переводить десяткове число у двійкову систему числення, другий - у шістнадцятирічну.

Для перекладу десяткового числа у двійкове подання використовується стандартний метод - ділення вихідного числа на 2 зі збереженням остачі, у нашім прикладі остача додається до рядка res з лівої сторони (08). У даному методі використовується цикл із передумовою while(), який щоразу одержує остачу від ділення на 2, потім ділить вихідне число на 2 і заносить отриману у першій дії остачу ліворуч у рядок. Наприкінці, після циклу, метод повертає отриманий рядок.

Спосіб перекладу з десяткового в шістнадцятирічне подання використовує аналогічний прийом, роблячи послідовно ділення на 16, за одним виключенням - остача в нашій програмі обчислюється за допомогою функції floor(), що повертає цілу частину дробового числа. У результаті одержимо цілочисельну остачу від ділення. Процес запису залишків у рядок більш складний, чим у випадку двійкової системи числення, тому що в шістнадцятирічній системі для подання числа недостатньо базового набору цифр від 0 до 9 і необхідно використовувати букви A-F. Для того щоб у рядок результату додавати букви, у програмі використовується оператор множинного вибору switch(), у якому здійснюється перевірка остачі. Залежно від величини остачі, у рядок результату додається необхідна буква (рядка 23-42).

Методи fromdectobin, fromdectohex повертають значення типу String, які можна безпосередньо використовувати як аргумент методу print() для висновку на консоль (рядка 48, 49). Як аргументи цих методів беруться числа, які потрібно перевести в задану систему числення.