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

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

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

Задача 01-01:

Напишете конзолна Java програма, която отпечатва текста Hello Java.

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

        //Print "Hello Java"
        System.out.println("Hello Java");
}

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

 

Задача 01-02:

Напишете конзолна Java програма, която пресмята и отпечатва стойността на следния числен израз:

(3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3

public class Uprjnenie01_02 {

    public static void main(String[] args) {
        System.out.println((3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3);
    }
}

Тук просто записваме целият математически израз в System.out.println();.

 

Задача 01-03:

Напишете Java конзолна програма, която отпечатва числата от 1 до 20 на отделни редове на конзолата.

1. Създайте нов Java клас със имеNums1To20

2. Направете си main метод.

3. Напишете 20 команди System.out.println(); една след друга, за да отпечатате числата от 1 до 20.

public class Nums1To20 {
    public static void main(String[] args) {
        System.out.println(1);
        System.out.println(2);
        System.out.println(3);
        System.out.println(4);
        System.out.println(5);
        System.out.println(6);
        System.out.println(7);
        System.out.println(8);
        System.out.println(9);
        System.out.println(10);
        System.out.println(11);
        System.out.println(12);
        System.out.println(13);
        System.out.println(14);
        System.out.println(15);
        System.out.println(16);
        System.out.println(17);
        System.out.println(18);
        System.out.println(19);
        System.out.println(20);
    }
}

алтернативно решение с цикъл for от  Ivan Andreev (от фейсбук)

public static void main(String[] args) {
        for (int i = 1; i <= 20; i++) {
            System.out.println(i);
        }

}

Важно при това решение е да започнем цикълът от i = 1 и да го извъртим до 20 включително (i <= 20)

 

Задача 01-04:

Напишете Java конзолна програма, която отпечатва триъгълник от 55 звездички, разположени на 10 реда

public class TriangleOf55Stars {
    public static void main(String[] args) {
        String star = "*";
        for (int i = 0; i < 10; i++) {
            System.out.println(star);
            star+="*";

        }
    }
}

Декларираме стринг star и му задаваме начална стойност "*". използваме цикъл който се завърта 10 пъти за да отпрчатаме стойността на стринга, като след всяко отпечтване добаваме  по една зездва към стринга преди завършването на текущотъо завъртане на цикъла. star+="*"; е еквивалент на star = star + "*";

 

Задача 01-05:

Напишете Java програма, която прочита от конзолата две числа a и b, пресмята и отпечатва лицето на правоъгълник със страни a и b.

import java.util.Scanner;

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

        Scanner scan = new Scanner(System.in);

        //Enter rectangle size
        int a = scan.nextInt();
        int b = scan.nextInt();

        //Print rectangle area
        System.out.println(a*b);
    }
}

Създаваме скенер за въвеждане в конзолата и при декларирането на променливите въвеждаме стойностите им в конзолата чрез скенера. Не е нужно да създаваме трета променлива за лице на правоъгълник, а директно записваме математическият израз a*b в System.out.println(); за да изведем резултата.

 

Задача 01-06:

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

1. Направете конзолна Java програма. За да прочетете числото N (2 ≤ N ≤100)

static void main(String[] args) {
    Scanner console = new Scanner(System.in);
    int n = Integer.parseInt(console.nextLine());
            
    // TODO: print the rectangle
}

2. Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли.(това условие очевидно не съм го изпълнил дословно)

import java.util.Scanner;

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

        Scanner scan = new Scanner(System.in);

        //Enter Square size
        int n = scan.nextInt();
        while (!(2 <= n && n <= 100)) {
            n = scan.nextInt();
        }

        //Square top/bottom and sides
        String star = new String(new char[n]).replace("\0", "*");
        String space = new String(new char[n - 2]).replace("\0", " ");

        //Draw square
        for (int i = 1; i <= n; i++) {
            if (!(i == 1 || i == n)) {
                System.out.println("*" + space + "*");
            } else {
                System.out.println(star);
            }

        }
    }
}

По мое мнение това е най-интересната задача. Правим си скенер за четене от конзолата и при декларирането на n (размерът на квадрата) въвеждаме стойност чре скенера. Правим цикъл While с проверка за n да е 2 ≤ N ≤100 и ако n не отговаря на условието се изисква ново въвеждане на променливата. Цикълът While се върти докато не въведем n в определената граница. Обърнете внимание, че проверкава в While е обратното на "n в границата ли е" (!(2 <= n && n <= 100)), което означава че n трябва да е извън границата за да се изпълни повторното въвеждане на стойност (n = scan.nextInt();). В следващите два реда декларираме два стринга, един който ще използваме за "капак" и "дъно" на квадрата(star) и един стринг за празните места в квадрата (space). Стринговете star и star са декларирани съответно с дължина n и n-2, като при декларирането ги запълваме съответно със звездички и празни места. За принтирането на квадрата използваме цикъл for, който ще отпечатва по един ред от квадрата при всяко завъртане. Вътре в цикъла имаме проверка кой от двата стринга да отпечатаме. В if правим проверка дали отпечатваме не-"капак" или не-"дъно", като отново особеното е че обръщаме резултата от проверката с !. Поверката я обръщаме за да можем "капак" и "дъно" да ги отпечатваме в else само ако не се отпечатва средата. По този начин даваме предимсто на вътрешността на квадрата, която може да бъде отпечатана многоркатно, за разлика от от "капак" и "дъно" които се опечатват само по веднъж.

 

7-ма и 8-ма задача са разписани на лекцията и няма да ги разглеждаме тук. Ако имате допълнителни въпроси и/или алтернативни решения може да ги споделите в темата за да ги обсъдим заедно.

1
Programming Basics
yanmark avatar yanmark 19 Точки

Ще дам и моите решения на задачи 4-та и 6-та тъй като за другите решенията са еднакви с дадените

за 4-та задача това е моето решение:

public class Triangle55Stars {

    public static void main(String[] args) {
        for (int i = 0; i <= 10; i++) {
            for (int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

А за 6-та задача е това:

import java.util.Scanner;

public class SquareOfStars {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();

        for (int i = 0; i < n; i++) {
            System.out.print("*");
        }
        System.out.println();
        for (int i = 0; i < n - 2; i++) {
            System.out.print("*");
            for (int j = 0; j < n - 2; j++) {
                System.out.print(" ");
            }
            System.out.print("*");
            System.out.println();
        }
        for (int i = 0; i < n; i++) {
            System.out.print("*");
        }
    }
}
0
mi4en avatar mi4en 0 Точки

Колега, аз ползвах същия подход, но поради някаква причина на последното 

for (int i = 0; i < n; i++)

ми казваше, че вече е дефинирано и не работеше... Сега ще сравня да видя какво съм сбъркал, thx :)

0
13/12/2016 09:09:29
dessy90 avatar dessy90 0 Точки

Здравейте,

Това са и мойте решения :)

RectangleArea:

import java.util.Scanner;


public class RectangleArea {

    public static void main(String[] args) {

        Scanner console = new Scanner(System.in);


        int a = Integer.parseInt(console.nextLine());

        int b = Integer.parseInt(console.nextLine());

            int area =  a*b;

            System.out.println(area);



    }

}

 

SquareOfStars:

import java.util.Scanner;


public class SquareOfStars {

    public static void main(String[] args){


        Scanner console = new Scanner(System.in);


        int n = console.nextInt();


        for(int i = 0; i < n ; i++){

            System.out.print("*");

        }


        System.out.println();


        for(int i = 1; i < n - 1 ; i++) {

            System.out.print("*");


            for(int j = 1; j < n - 1 ; j++) {

                System.out.print(" ");

            }


            System.out.println("*");

        }


        for(int i = 0; i < n; i++){

            System.out.print("*");

        }


        System.out.println();

    }

}

 

Останалите задачи няма нужда да ги качвам. ;)

0
13/12/2016 10:27:17
Nikolay712 avatar Nikolay712 0 Точки
import java.util.Scanner;


public class Face {

    public static void main(String[] args) {

        Scanner console = new Scanner(System.in);
        int a = 7;

        a = Integer.parseInt(console.nextLine());

        int b = 2;

        b = Integer.parseInt(console.nextLine());

        int area =  a*b;

        System.out.println(a*b);



    }

}

Защо не ми показва никакъв резултат след като го стартирам ??

0
Jovtcho avatar Jovtcho 20 Точки

Това е и моето решение на 6та задача.

 

import java.util.Scanner;

public class SquareStars {
    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        int j = Integer.parseInt(console.nextLine());
        for (int k = 1; k <= j; k ++) {
            if (k==1 || k==j) {
                for (int i = 1; i <= j; i ++) {
                    System.out.print("*");
                }
            } else {
                System.out.print("*");
                for (int i = 2; i < j; i++) {
                    System.out.print(" ");
                }
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

0
nikiman8888 avatar nikiman8888 6 Точки

int n = scan.nextInt() ;

int n = Integer.parseInt(console.nextLine()) ;

Тея двете променливи едно и също ли означават..?ако може разяснение.

 

0
joto_to avatar joto_to 40 Точки

И двата реда извикват скенера за да въведеш данни в променливата n, която е от целочислен тип(може да приема стойност на цели числа без дробна част). Първият ред int n = scan.nextInt(); извиква скенерът, който сме го кръстили scan (Scanner scan = new Scanner(System.in);), и очаква потребителят да въведе само цяло число без други букви или символи. Вторият ред int n = Integer.parseInt(console.nextLine()); извиква скенерът, който сме го кръстили console (Scanner console = new Scanner(System.in);), и очаква потребителят да въведе какъвто и да е текст от който с Integer.parseInt() ще вземе само числата от него и ще ги интерпретира като цяло число. 

0
15/12/2016 09:51:30
sh06o avatar sh06o 2 Точки

Благодаря за споделените решения! Искаше ми се да намеря от някъде само условията, но не се подразбират ясно от текста който си поставил м/у парчетата код. Трябваше да се ориентирам какво се иска, интерпретирайки кода ти...И моите решения са си д/г същите, но за тия задачи няма и как иначе. Връщам жеста предоставяйки моите различаващи се решения.

Задача 6.

import java.util.Scanner;

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

    Scanner scan = new Scanner(System.in);
    
    int square_size, column, row;
    

//Това тука не играе, иначе щеше да има частен случай който да проверява това!
//По погрешка съм променил правилото от !(2 <= n && n <= 100) към !(1 <= n && n <= 100).
//    do {
        square_size = scan.nextInt();
//    } while(square_size < 1 || square_size > 100);
    
    for (row = 1; row <= square_size; row++) {
      for (column = 1; column <= square_size; column++) {
      
        System.out.print( (row == 1 || row == square_size) ? "*" : (column == 1 || column == square_size) ? "*" : " ");
      }
      
      System.out.println();
    }
  }
}

Задача 5.

import java.util.Scanner;

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

    Scanner scan = new Scanner(System.in);

    int a,b;
    
    //Reads rectangle dimensions
    a = scan.nextInt();
    b = scan.nextInt();

    //Prints out the given rectangle area
    System.out.println(a*b);
  }
}

Задача 4.

public class ExerciseFour {
  
  public static void main(String[] args) {
    //Prints out a tree image with 10 elements base
    int i, j;
    
    for (i=1; i<=10; i++) {
      for (j=0; j<i; j++) {
        System.out.print("*");
      }
      
      System.out.println();
    }
  }
}

 

0
15/12/2016 09:38:34
evittlyemov avatar evittlyemov 4 Точки

Благодаря за решенията, доста ми помогнаха за някои детайли :).

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