• Апреля 08, 2020, 04:16:56 am
• Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Новости: Вебинар по выбору IT профессии: http://bit.ly/2S4kcC6

Автор Тема: Разные задачи по массивам  (Прочитано 31160 раз)

SashKo

  • Клиенты
  • Пользователи
  • *****
  • Сообщений: 3
    • Просмотр профиля
    • E-mail
Разные задачи по массивам
« : Марта 26, 2014, 04:39:55 pm »
ДЗ-4:ControlFlow
1.Вывести на экран числа от -10 до 25 с помощью всех известных циклов.
2.Вывести на экран все числа от 1 до 100, которые делятся на 5 без остатка.
3.Заполнить массив short типа числами от 100 до 0.
4.Найти в массиве чисел элементы с наибольшим(max) и наименьшим(min) значениями. Вывести эти 2 элемента на экран, а также посчитать и вывести сумму всех остальных элементов (min и max в сумму не входят).
5.Написать метод для зеркального переворота элементов в массиве ([1, 2, 3, 4] -> [4, 3, 2, 1]).
6.Написать метод, который заполнит массив произвольного размера числами по возрастанию, начиная с центра массива, например, [5,4,3,2,1,0,1,2,3,4,5].
7.Найти в массиве число, которое повторяется наибольшее количество раз.
8.С помощью консоли пользователь вводит математическое выражение типа “1+33-4*7”. Написать программу для подсчета его значения. Приоритет операций не учитывается.

Буду добавляти по ходу рішення  :)

1
public class zadacha1 {
    public static void main(String[] args) {
        System.out.println("Цикл while");
        int i = - 11;
        while (i++ < 25) {
            System.out.print(i + ", ");
        }
        System.out.println(" ");
        System.out.println("Цикл do while");

        int k = - 10;
        do {
            System.out.print(k + ", ");} while(k++ < 25);
        System.out.println(" ");

        System.out.println("Цикл For");

        int c = -10;

        for (c = -10; c < 26; c++){
            System.out.print(c + ", ");
        }
    }
}
/


2 Тут зробив так, що спочатку потрібно ввести число ( не обовязково 5), на яке будемо ділити числа від 1 до 100.
import java.util.Scanner;

**
 * Created by Скімінок on 26.03.14.
 */
public class Zadacha2 {
    public static void main(String[] args) {
        int k = inputVal('k');
        int c;
        int i = 1;

        while (i++ <=100) {
            c = i % k;
            if ( c == 0){
                System.out.println(i);

            }

        }
    }
    private static int inputVal(int variableName) {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }


}


3
Тут також трохи видозмінив програмку. вона заповнює задом наперед будь який Short( в рамках можливого) :)
потрібно просто ввести кількість елементів в масиві, який ви хочете створити

import java.util.Arrays;
import java.util.Scanner;

/**
 * Created by Скімінок on 26.03.14.
 */
public class Zadacha3 {
    public static void main(String[] args) {
        System.out.println("Введіть кількість елементів масиву");
        short k = inputVal('k');
        short []a = new short[k];
        short i = k;
        short j = 0;


        for (i = k, j = 0; i > 0; j++, i--) {
            a[j] = i;
        }
        String s = Arrays.toString(a);
        System.out.println(s);
    }

    private static short inputVal(int variableName) {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextShort();

    }
}
/

4. Трішки великий код получився   :o  я тут рандомно заповнив масив, кількість якого вводиться з консолі, та найбільше значення елементів

import javax.swing.*;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Created by Скімінок on 26.03.14.
 */
public class zadachka {
    public static void main(String[] args) {

        System.out.println("Введіть кількість елементів масиву");
        int k = inputVal('k');
        System.out.println("Введіть найбільший можливий значення елементу масиву");
        int q = inputVal('q');
        int[]a = new int[k];      // Опис різних потрібних змінних
        int max = 0;
        int min = a[0];
        int sum = 0;


        Random r = new Random();
        for (int i = 0; i < a.length; i++)  // запис в мачив чисел рандомного типу, максимальне значення ми вводимо вручну
            a[i] = r.nextInt(q);            // як і кількість елементів в масиві :) та виводимо получений масив на екран
        System.out.println(Arrays.toString(a));


        for (int i = 0; i < a.length - 1; i++){
            if (max < a[i]){ max = a[i]; // знаходимр найбільше значення масиву
            }
        }
        System.out.println("max= " + max);

        for (int i = 0; i < a.length - 1; i++){  // знаходимр найменше значення масиву
            if (min > a[i]){ min = a[i];
            }
        }
        System.out.println("min= " + min);
        for (int i = 0; i < a.length - 1; i++){   // знаходимр суму всіх елементів масиву та виводимо
           sum = sum + a[i];                        // і ще виводимо умову задачі, суму без MAX and MIN
        }
        System.out.println("Сума всіх чисел" + sum);
        System.out.println("Сума всіх чисел, окрім MAX та MIN " + (sum - max - min));
    }

    private static int inputVal(int variableName) {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }
}

5 В цій задачі зробив, що не тільки 1,2,3,4 перевертає. а будь - який масив, з введеним числом елементів з консолі  :)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

/**
 * Created by Скімінок on 22.03.14.
 */
public class Zadacha_5zplusom {
    public static void main(String[] args) throws IOException {
        BufferedReader d = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Введіть число, яке буде означати кількість елементів в масиві");

        int m = Integer.parseInt(d.readLine());

        int a[] = new int[m];

        for (int k = 0; k < m; k++){
             a[k] = k + 1;
        }
        String s = Arrays.toString(a);

        System.out.println(s); // Виводимо масив, який получився

        for (int i = 0; i < m/2; i++){
            int c = a[i];
            a[i] = a[a.length - (1 + i)];
            a[a.length - (1 + i)] = c;
        }



        String s2 = Arrays.toString(a);

        System.out.println(s2); // Виводимо перевернутий масив

    }
}

6. Ось тут ніби все ок (програма працює з будь -яким числом елементів, не тільки з 11. але тільки з непарною кількістю!!! можна це якось виправити?

import java.util.Arrays;
import java.util.Scanner;

/**
 * Created by Скімінок on 26.03.14.
 */
public class Zadacha6 {
    public static void main(String[] args) {
        System.out.println("Введіть кількість елементів масиву");
        int k = inputVal('k');
        int[]a = new int[k];
        int i = k/2, j = 1, c = k/2;
        a[i] = 0;



        for ( i = k/2+1, j = 1, c = k/2-1;c >= 0; i++ , j++ , c-- ) {
            a[i] = j;
            a[c] = j;
        }
        String s = Arrays.toString(a);
        System.out.println(s);

    }

    private static int inputVal(int variableName) {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();
    }
}

7. Довго не міг додуматися, як її правильно зробити ... )
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

/**
 * Created by Скімінок on 26.03.14.
 */
public class Zadacha7 {
    public static void main(String[] args) {
        System.out.println("Введіть кількість елементів масиву");  // Сворюємо масив на ввеену кількість символів
        int k = inputVal('k');
        int[]a = new int[k];


        Random r = new Random();            // Рандомно вводимо дані в масив,значення чисел не більше 20
        for (int i = 0; i < a.length; i++)
            a[i] = r.nextInt(20);

        System.out.println(Arrays.toString(a));  // Виводимо на екран масив, що получився

        int m = 1;                           // Описуємо потрібну змінну та масив, для подальших операцій
        int a1[] = new int[a.length];

        for (int i = 0; i < k; i++) {        // Створюэмо масив з пыдрахунками повторень одинакових чисел у головному
            for (int j = 0; j < k; j++){
                if ((a[j] == a[i] ) && (j != i)){ ++m;                                    }
            }
            a1[i] = m;
            m = 1;
        }

        int max = a1[0];
                                               //Шукаємо найбільший значення у новоствореному масиві
        for (int i = 0; i < a.length - 1; i++){
            if (max <= a1[i+1]){
                max = a1[i+1];}
        }

        System.out.println(Arrays.toString(a1));
                                                  //Шукаємо якому значенню головного масива належить max
        int res = 0;
        for (int i = 0; i < a1.length; i++){
            if (max == a1[i]){ System.out.println("Число яке найчастіше повторюється "+ a[i]);
                res = a[i];
                break;   // Виводимо на екран число, що найбыльше повторюэться
            }
        }
        System.out.println("Кількість чисел " + res + " в масиві " + max);

    }
    private static int inputVal(int variableName) {
        Scanner scanner = new Scanner(System.in);
        return scanner.nextInt();

    }
}
« Последнее редактирование: Марта 27, 2014, 01:08:29 pm от SashKo »

Vsevolod

  • CEO
  • Administrator
  • Пользователи
  • *****
  • Сообщений: 1919
    • Просмотр профиля
    • Курсы программирования
    • E-mail
Re: ДЗ. модуль1. заняття4
« Ответ #1 : Марта 26, 2014, 04:44:39 pm »
Правила внеурочной поддержки: http://www.prog.kiev.ua/forum/index.php/topic,106.0.html Читаем, изучаем... ;)
Prog.kiev.ua - курсы Java/Android/QA/Front-End. (044) 232-65-48, (093) 256-51-48, (095) 0-777-300, (096) 0-555-111

SashKo

  • Клиенты
  • Пользователи
  • *****
  • Сообщений: 3
    • Просмотр профиля
    • E-mail
Re: ДЗ. модуль1. заняття4
« Ответ #2 : Марта 26, 2014, 05:12:05 pm »
ну більш - менш ) в пошуку не знайшов )

SunDrop

  • Клиенты
  • Пользователи
  • *****
  • Сообщений: 51
  • SunDrop
    • ICQ клиент - 404911
    • Просмотр профиля
    • http://www.sundrop.name/
Re: Разные задачи по массивам
« Ответ #3 : Марта 27, 2014, 09:49:05 pm »
Долго смотрел, но решил все таки высказать свое мнение.
Постараюсь его максимально обосновать.
Основное, что бросается лично мне в глаза - лишние переменные и лишние строчки кода.
Чем это плохо? Ведь и так работает.
Исходя из практики хочу сказать:
1) Каждая лишняя строчка - дополнительная возможная ошибка
2) Когда через 2-3 года нужно будет разобрать свой старый код, проще понять 2 строчи кода, чем 20 строчек кода.
Итак, задачи по порядку.

Задача №1:
// То что есть...
int c = -10;
for (c = -10; c < 26; c++){
    System.out.print(c + ", ");
}

// Как следует
for (int c = -10; c < 26; c++){
    System.out.print(c + ", ");
}
Почему так?
1) Двойное присвоение переменной: первый раз при объявлении, второй раз внутри цикла.
2) Область видимости. В первом случае переменная с доступна внутри всего метода, во втором только внутри блока for.

Задача №2:
Переменная с тут вообще не нужна.
while (i++ <=100) {
    if ( 0 == (i % k) ){
        System.out.println(i);
    }
}
Удалили лишнюю переменную - код стал меньше, понятнее и убрали место для возможных ошибок в будущем.

Задача №3:
short k = inputVal('k');
short []a = new short[k];
short j = 0;
while (k > 0) {
    a[j++] = k--;
}
1) Переменная i опять же лишняя, т.к. у нас уже есть ее значение в k
2) В принципе в for можно писать несколько конструкций через "," и иногда это имеет смысл, но часто слишком много инструкций размывают понимание алгоритма, заложенного в программу.

Задача №4:
// То что есть...
int max = 0;
int min = a[0];
int sum = 0;
А если массив у нас сугубо из отрицательных элементов? min же правильно задано.
// Как следует
int max = a[0];
int min = a[0];
int sum = 0;

И еще... Оптимизация.
3 цикла.
1-ый находит максимальный
2-ой находит минимальный
3-ий считает сумму
Тут, считаю, нужно объединить в один цикл.
for (int i = 0; i < a.length - 1; i++){
    // знаходимр найбільше значення масиву
    if (max < a[i]){ max = a[i];
    }
    // знаходимр найменше значення масиву
    if (min > a[i]){ min = a[i];
    }
    // знаходимр суму всіх елементів масиву та виводимо
    sum += a[i];                       
}

Задача №5:
Идеально!
Супер!

Задача №6:
Запутанно немного из-за большого кол-ва переменных, но у меня, насколько я помню был еще более запутанный код.
А может и нет:
for (int i = 0; i < k>>1; i++) {
    a[i] = a[k-i-1] = (k>>1) - i;
}
тут k>>1 равносильно k/2 (бинарный сдвиг)
Просто немного сбивает, когда for работает одновременно с несколькими переменными. Не более.
Так все хорошо.
В 20 лет он знал 9 операционных систем и 15 языков программирования, но ни одной женщины!

SashKo

  • Клиенты
  • Пользователи
  • *****
  • Сообщений: 3
    • Просмотр профиля
    • E-mail
Re: Разные задачи по массивам
« Ответ #4 : Марта 27, 2014, 11:12:15 pm »
дякую за таку відповідь )
деякі виправлення вже сам помічав, після виконання, але лінь було вже змінювати (

Alex999

  • Клиенты
  • Пользователи
  • *****
  • Сообщений: 1
    • Просмотр профиля
    • E-mail
Re: Разные задачи по массивам
« Ответ #5 : Мая 25, 2014, 10:48:29 am »
Задача:
Найти в массиве чисел элементы с наибольшим и наименьшим значениями.

Вопрос:
Почему после выполнения функции ArrFindElement.min(a) массив а меняет свое значение? А именно почему массиву a
присваивается значение массива b?
package OOP;
//Найти в массиве чисел элементы с наибольшим и наименьшим значениями.

import java.util.Arrays;
class OOPFive {

    public static void main(String[] args) {
        int[] a = {3, 4, 5, 6, 7, 8, 24, 95, 15, 2, 80, 4};
        System.out.println (Arrays.toString(a));
        System.out.println("Минимальное значение: " + ArrFindElement.min(a));
        System.out.println (Arrays.toString(a));
        System.out.println("Максимальное значение: " + ArrFindElement.max(a));
    }
}

class ArrFindElement {

    public static int min (int[] a) {
        int x = 0;
        int[] b = a;
        for (int i = 0; i < b.length - 1; i++) {
            if (b[i] < b[i + 1]) {
                b[i + 1] = b[i];
                x = b[i];
            }
            x = b[i + 1];
        }
        return x;
    }

    public static int max (int[] a) {
        int x = 0;
        int[] c = a;
        for (int i = 0; i < c.length - 1; i++) {
            if (c[i] > c[i + 1]) {
                c[i + 1] = c[i];
                x = c[i + 1];
            }
            x = c[i + 1];
        }
        return x;
    }
}

Vsevolod

  • CEO
  • Administrator
  • Пользователи
  • *****
  • Сообщений: 1919
    • Просмотр профиля
    • Курсы программирования
    • E-mail
Re: Разные задачи по массивам
« Ответ #6 : Мая 27, 2014, 02:27:47 pm »
Цитировать
Почему после выполнения функции ArrFindElement.min(a) массив а меняет свое значение? А именно почему массиву a
присваивается значение массива b?
Именно. Чтобы не менял надо добавить что-то типа

int b[] = Array.copyOf(a, a.length);
Prog.kiev.ua - курсы Java/Android/QA/Front-End. (044) 232-65-48, (093) 256-51-48, (095) 0-777-300, (096) 0-555-111

Neposeda

  • Пользователи
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Разные задачи по массивам
« Ответ #7 : Ноября 23, 2014, 08:12:39 pm »
Задача:
Найти в массиве число, которое повторяется наибольшее количество раз. Не использовать коллекции.

Застрял на этапе когда уже получил массив данных о количестве повторяющихся чисел.
Что дальше с этим делать, никак придумать не могу (

Или может пошел совсем не тем путем?

#
public class Task2 {

      public static void main(String[] args) {
         
           int[] m = {3, 5, 25, 3, 5, 15, 5, 5, 6, 3, 5, 15, 5, 15, 10};//данный массив чисел
           int[] a = new int [m.length];//массив для хранения результатов
          
      for (int j = 0; j < m.length; j++){ //цикл в для выбора элемента сравнения
             
           for (int i = 0; i<m.length; i++){ //цикл для сравнения выбранного элемента со всеми элементами массива
               if(m[j] == m){ //если элементы равны ...
               a++; //...делаем +1 в соответствующий элемент массив для хранения результатов
              }
           }
             
       }
      System.out.println(Arrays.toString(a));
   }
}
#
https://github.com/Neposedaua/Java/issues/22

Vsevolod

  • CEO
  • Administrator
  • Пользователи
  • *****
  • Сообщений: 1919
    • Просмотр профиля
    • Курсы программирования
    • E-mail
Re: Разные задачи по массивам
« Ответ #8 : Ноября 25, 2014, 04:26:52 pm »
Neposeda, можно складывать в другой массив... например.
Prog.kiev.ua - курсы Java/Android/QA/Front-End. (044) 232-65-48, (093) 256-51-48, (095) 0-777-300, (096) 0-555-111

Dlarit

  • Пользователи
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Разные задачи по массивам
« Ответ #9 : Ноября 27, 2014, 10:41:02 pm »
Пары задач по теме "Ветвление и циклы". Прошу проверить.
Надеюсь темой не ошиблась :)

https://gist.github.com/Dlarit/fc0532b435c3422c2bee

Vsevolod

  • CEO
  • Administrator
  • Пользователи
  • *****
  • Сообщений: 1919
    • Просмотр профиля
    • Курсы программирования
    • E-mail
Re: Разные задачи по массивам
« Ответ #10 : Декабря 04, 2014, 11:24:19 am »
Пары задач по теме "Ветвление и циклы". Прошу проверить.
Надеюсь темой не ошиблась :)

https://gist.github.com/Dlarit/fc0532b435c3422c2bee
Извиняюсь за поздний ответ. Все правильно, но я бы еще подумал над задачей "2. Вывести на экран все числа от 1 до 100, которые
делятся на 3 без остатка." - можно проще.
Prog.kiev.ua - курсы Java/Android/QA/Front-End. (044) 232-65-48, (093) 256-51-48, (095) 0-777-300, (096) 0-555-111