Loading...
joto_to avatar joto_to 40 Точки

Решение на Домашно 02 от Основи на програмирането с Java - декември 2016

Това са моите решения на домашното от 10.12 + защо съм избрал да реша задачите по този начин. Темата е отрорена за дискусии, алтернативни решения и въпроси.

Задача 02-01 (2. Пресмятане на лице на квадрат):

Да се напише конзолна програма, която въвежда цяло число a и пресмята лицето на квадрат със страна a. Задачата е тривиално лесна: въвеждате число от конзолата, умножавате го само по себе си и печатате получения резултат на конзолата.

import java.util.Scanner;

//p01_SquareArea
public class Uprajnenie02_01 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.print("a = ");
        int a = Integer.parseInt(scan.nextLine());
        int area = a * a;

        System.out.println("Square area = " + area);
    }
}

 

Задача 02-02 (3. От инчове към сантиметри):

Да се напише програма, която чете от конзолата число (не непременно цяло) и преобразува числото от инчове в сантиметри. За целта умножава инчовете по 2.54 (защото 1 инч = 2.54 сантиметра).

import java.util.Scanner;
//p02_InchesToCentimeters
public class Uprajnenie02_02 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.print("Inches=");
        double inches = Double.parseDouble(scan.nextLine());
        double centimeters = inches * 2.54;

        System.out.println("Centimeters = " + centimeters);

    }
}

 

Задача 02-03 (4. Поздрав по име):

Да се напише програма, която чете от конзолата име на човек и отпечатва “Hello, <name>!”, където <name> е въведеното преди това име.

import java.util.Scanner;

//p03_Greeting
public class Uprajnenie02_03 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        //System.out.print("Name: ");
        String name = scan.nextLine();

        System.out.printf("Hello, %s!", name);

    }
}

 

Задача 02-04 (5. Съединяване на текст и числа):

Напишете Java програма, която прочита от конзолата име, фамилия, възраст и град и печата съобщение от следния вид: “You are <firstName> <lastName>, a <age>-years old person from <town>”.

import java.util.Scanner;
//p04_ConcatenateData
public class Uprajnenie02_04 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        String firstName = scan.nextLine();
        String lastName = scan.nextLine();
        int age = Integer.parseInt(scan.nextLine());
        String city = scan.nextLine();

        System.out.printf("You are %s %s, a %d-years old person from %s.", firstName, lastName, age, city);
    }
}

 

Задача 02-05 (6. Лице на трапец):

Напишете програма, която чете от конзолата три числа b1, b2 и h и пресмята лицето на трапец с основи b1 и b2 и височина h. Формулата за лице на трапец е (b1 + b2) * h / 2.

На фигурата по-долу е показан трапец със страни 8 и 13 и височина 7. Той има лице (8 + 13) * 7 / 2 = 73.5.

import java.util.Scanner;

//p05_TrapezoidArea
public class Uprajnenie02_05 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double a = Double.parseDouble(scan.nextLine());
        double b = Double.parseDouble(scan.nextLine());
        double h = Double.parseDouble(scan.nextLine());

        double trArea = (a + b) * h / 2;

        System.out.println("Trapezoid area = " + trArea);

    }
}

 

Задача 02-06 (7. Периметър и лице на кръг):

Напишете програма, която чете от конзолата число r и пресмята и отпечатва лицето и периметъра на кръг / окръжност с радиус r.

import java.util.Scanner;

public class Uprajnenie02_06 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double r = Double.parseDouble(scan.nextLine());
        double area = Math.PI * r * r;
        double perimeter = 2 * Math.PI * r;

        System.out.println("Area = " + area);
        System.out.println("Perimeter = " + perimeter);
    }
}

 

Задача 02-07 (8. Лице на правоъгълник в равнината):

Правоъгълник е зададен с координатите на два от своите срещуположни ъгъла (x1, y1) – (x2, y2). Да се пресметнат площта и периметъра му. Входът се чете от конзолата. Числата x1, y1, x2 и y2 са дадени по едно наред. Изходът се извежда на конзолата и трябва да съдържа два реда с по една число на всеки от тях – лицето и периметъра.

import java.util.Scanner;

public class Uprajnenie02_07 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double x1 = Double.parseDouble(scan.nextLine());
        double y1 = Double.parseDouble(scan.nextLine());
        double x2 = Double.parseDouble(scan.nextLine());
        double y2 = Double.parseDouble(scan.nextLine());

        double a = Double.max(x1, x2) - Double.min(x1, x2);
        double b = Double.max(y1, y2) - Double.min(y1, y2);

        double area = a * b;
        double perimeter = (a + b) * 2;

        System.out.println("Area = " + area);
        System.out.println("Perimeter = " + perimeter);
    }
}

 

Задача 02-08 (9. Лице на триъгълник):

Напишете програма, която чете от конзолата страна и височина на триъгълник и пресмята неговото лице. Използвайте формулата за лице на триъгълник: area = a * h / 2. Закръглете резултата до 2 знака след десетичната точка използвайки “%.2f“.

import java.util.Scanner;

public class Uprajnenie02_08 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double a = Double.parseDouble(scan.nextLine());
        double h = Double.parseDouble(scan.nextLine());

        double area = a * h / 2;

        System.out.printf("Area = %.2f", area);

    }
}

 

Задача 02-09 (10. Конзолен конвертор: от градуси °C към градуси °F):

Напишете програма, която чете градуси по скалата на Целзий (°C) и ги преобразува до градуси по скалата на Фаренхайт (°F). Потърсете в Интернет подходяща формула (fahrenheit = celsius * 1.8 + 32), с която да извършите изчисленията. Закръглете резултата до 2 знака след десетичната точка. Примери:

import java.util.Scanner;

public class Uprajnenie02_09 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double celsius = Double.parseDouble(scan.nextLine());
        double fahrenheit = celsius * 1.8 + 32;

        System.out.printf("Fahrenheit = %.2f", fahrenheit);
    }
}

 

Задача 02-10 (11. Конзолен конвертор: от радиани в градуси):

Напишете програма, която чете ъгъл в радиани (rad) и го преобразува в градуси (deg). Потърсете в Интернет подходяща формула. Числото π в Java програми е достъпно чрез Math.PI. Закръглете резултата до най-близкото цяло число.

import java.util.Scanner;

public class Uprajnenie02_10 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double rad = Double.parseDouble(scan.nextLine());

        double deg = Math.toDegrees(rad);

        System.out.printf("deg = %.0f", deg);
    }
}

Това май трябва да го напиша на ново с Math.PI и формула?

 

Задача 02-11 (12. Конзолен конвертор: USD към BGN):

Напишете програма за конвертиране на щатски долари (USD) в български лева (BGN). Закръглете резултата до 2 цифри след десетичната запетая. Използвайте фиксиран курс между долар и лев: 1 USD = 1.79549 BGN.

import java.util.Scanner;

public class Uprajnenie02_11 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double usd = Double.parseDouble(scan.nextLine());
        double bgn = usd * 1.79549;

        System.out.printf("bgn = %.2f", bgn);
    }
}

Тук може да се добави променлива за курса на долара за по-лесна промяна на курса.

 

Задача 02-12* (13. * Конзолен междувалутен конвертор):

Напишете програма за конвертиране на парична сума от една валута в друга. Трябва да се поддържат следните валути: BGN, USD, EUR, GBP. Използвайте следните фиксирани валутни курсове:

import java.util.Scanner;

public class Uprajnenie02_12 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        double cash = Double.parseDouble(scan.nextLine());
        String startingCurancy = scan.nextLine().toUpperCase();
        String convertToCurancy = scan.nextLine().toUpperCase();
        double cashConverted = Uprajnenie02_12.CashConverter(cash, startingCurancy, convertToCurancy);

        System.out.printf("%.2f %s", cashConverted, convertToCurancy);
    }

    public static double CashConverter(double cash, String startCurancy, String endCurancy) {

        double toUsd = 1.79549;
        double toEur = 1.95583;
        double toGbp = 2.53405;

        if (cash == 0) {
            return cash;
        } else {
            switch (startCurancy) {
                case "BGN":
                    break;
                case "USD":
                    cash = cash * toUsd;
                    break;
                case "EUR":
                    cash = cash * toEur;
                    break;
                case "GBP":
                    cash = cash * toGbp;
            }

            switch (endCurancy) {
                case "BGN":
                    break;
                case "USD":
                    cash = cash / toUsd;
                    break;
                case "EUR":
                    cash = cash / toEur;
                    break;
                case "GBP":
                    cash = cash / toGbp;
            }

            return cash;
        }
    }
}

Тази задача беше забавна. Очаквайте скоро описание на какво и защо... дълго е.

 

Задача 02-13** (14. ** Пресмятане с дати: 1000 дни на Земята):

Напишете програма, която въвежда рождена дата във формат “dd-MM-yyyy” и пресмята датата, на която се навършват 1000 дни от тази рождена дата и я отпечатва в същия формат.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

public class Uprajnenie02_13 {
    public static void main(String[] args){

        Scanner scan = new Scanner(System.in);

        String bDay = scan.nextLine();
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd-MM-yyyy");
        int add_days = 999;
        LocalDate birthDay = LocalDate.parse(bDay, dateFormat).plusDays(add_days);

        System.out.println(dateFormat.format(birthDay));


    }
}

Поради някаква причина джъдж иска да се добавят 999 дни, което според мен е грешно. Един ден от рождението ви се навършва на следващият ден след раждането. Но все пак това е решенито за 100 точки в джъдж.

 

Задача 02-14* (15. *Учебна зала):

Учебна зала има правоъгълен размер w на h метра, без колони във вътрешността си. Залата е разделена на две части – лява и дясна, с коридор приблизително по средата. В лявата и в дясната част има редици с бюра. В задната част на залата има голяма входна врата. В предната част на залата има катедра с подиум за преподавателя. Едно работно място заема 70 на 120 cm (маса с размер 70 на 40 cm + място за стол и преминаване с размер 70 на 80 cm). Коридорът е широк поне 100 cm. Изчислено е, че заради входната врата (която е с отвор 160 cm) се губи точно 1 работно място, а заради катедрата (която е с размер 160 на 120 cm) се губят точно 2 работни места. Напишете програма, която въвежда размери на учебната зала и изчислява броя работни места в нея при описаното разположение.

Вход

От конзолата се четат 2 числа, по едно на ред: h (дължина в метри) и w (широчина в метри).

Ограничения: 3 ≤ h ≤ w ≤ 100.

import java.util.Scanner;

public class Uprajnenie02_14 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        //dyljina na zalata
        double w = Double.parseDouble(scan.nextLine());

        //shirina na zalata
        double h = Double.parseDouble(scan.nextLine());

        while (!((3 <= h) && (h <= w) && (w <= 100))) {
            w = Double.parseDouble(scan.nextLine());
            h = Double.parseDouble(scan.nextLine());
        }

        //shirina na koridora
        int koridor = 100;

        //razmer na biuro + stol
        int biuroW = 120;
        int biuroH = 70;

        //broi redove i koloni ot biuro + stol
        int redove = (int) (w * 100) / biuroW;
        int koloni = (int) (h * 100 - koridor) / biuroH;

        //obsht broi biuro + stol
        int broiBiura = redove * koloni - 3;

        System.out.println(broiBiura);

    }
}

Тук всичко е повече аритметика от колкото програмиране.

 

Задача 02-15* (16. *Зеленчукова борса):

Градинар продавал реколтата от градината си на зеленчуковата борса. Продава зеленчуци за N лева на килограм и плодове за M лева за килограм. Напишете програма, която да пресмята приходите от реколтата в евро ( ако приемем, че едно евро е равно на 1.94лв).

import java.util.Scanner;

public class Uprajnenie02_15 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        //cena zelenchuci
        double n = Double.parseDouble(scan.nextLine());

        //cena polodove
        double m = Double.parseDouble(scan.nextLine());

        //BGN to EUR
        double eur = 1.94;

        int tegloZelenchuci = Integer.parseInt(scan.nextLine());
        int tegloPolodove = Integer.parseInt(scan.nextLine());

        double prihodEur = ((tegloZelenchuci * n) + (tegloPolodove * m)) / eur;

        System.out.printf("%.13f", prihodEur);

    }
}

Джъдж не харесва 14 символа след десетичната запетая и едната проверка не минава. Няма друга причнина да използвам "printf("%.13f".

2
Programming Basics 22/12/2016 22:25:40
alper_k avatar alper_k 3 Точки

Привет!

Имам въпрос относно задача 12.

Пробвах да го напиша със if- конструкции. Въвеждам числото, което трябва да се конвертира, входната и изходната валута, но след това програмата ми бива терминирана.

Пробвах и по Вашия начин, със switch case и получих същия резултат.

Въпросът ми е защо ми терминира програмата и как мога да го поправя?

Благодаря Ви!

 

 

Кодът е следния:

http://pastebin.com/CVxiNB8A

 

0
15/01/2017 23:41:20
joto_to avatar joto_to 40 Точки

Би ли си добавил кода, за да можем да го прегледаме и обсъдим.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.