С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 4
Регистрация: 10.01.2017
Сообщений: 7
1

Как лучше написать класс(т.е. саму структру)для решения слудующей задачи:

10.01.2017, 13:26. Показов 1600. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача. Объявление массивов
В языке Java любой объявленный массив является объектом, который содержит некоторую вспомогательную информацию (заголовок) и собственно сам массив. Размер заголовка объекта для 64-разрядных систем составляет 16 байт, и мы работаем в такой системе. Стоит также отметить, что в java размер любого объекта кратен 8 байтам.
Рассмотрим внутреннюю структуру такого объекта. В нем содержится 16 байт вспомогательной информации, 4 байта уходит на хранение длины массива, а затем сам массив, который занимает length*size памяти, где length – это его длина, а size – размер элементов, хранящихся в массиве. При объявлении в программе двумерного массива создается объект, который будет содержать в себе массив, каждый элемент которого будет являться одномерным массивом. Так же не стоит забывать, что на каждый объект создается внешняя ссылка, имеющая свой размер.
Задача состоит в подсчете количества памяти, которое занимает каждый из заданных массивов.

Формат входного файла
Входной файл arrays.in содержит объявления массивов через символ «;» (точка с запятой). В файле может быть несколько строк. Типы (type) элементов массивов: byte, short, int, long, float, double, char. Все массивы имеют уникальные имена! Рассмотрим четыре вида объявления массивов:
type []…[]name = new type[size1]…[sizeN];
type name[]…[] = new type[size1]…[sizeN];
type name[] = {item1, item2, …}; //только одномерный случай, разделители: запятые и пробелы
type []name = {item1, item2, …}; //только одномерный случай, разделители: запятые и пробелы

Формат выходных файлов
В выходной файл bytes1.out вывести список имен массивов, отсортированных по алфавиту - 2 балла.
В выходной файл bytes2.out вывести список имен массивов в порядке убывания количества элементов – 2 балла. Формат вывода: имя массива тире количество элементов, каждый массив с новой строки.
В выходной файл bytes3.out вывести объем памяти в байтах, занимаемой соответствующим массивом - 3 балла. Формат вывода: объявление массива тире количество байт, каждый массив с новой строки.
За использование коллекции – 1 балл.
За использование итератора – 1 балл.
За использование компаратора для осуществления сортировки – 1 балл.

Пример
byte []a = new byte [1]; //массив занимает 8 байт на внешнюю ссылку, 16 вспомогательных байт, 4 байта на хранение длины массива и 1 байт на сам массив. Итого 29 байт. Делаем результат кратным восьми. Поучаем 32 байта.
int c[][] = new int[100][100]; //массив занимает 8 байт на внешнюю ссылку, 16 вспомогательных байт, 4 байта на хранение длины массива и 100*size байт на массив, где size – размер одномерного массива из 100 чисел типа int. В данном случае size = 8 + 16 + 4 + 4*100. Итого 428 байт занимает один массив. Сделаем выравнивание до кратности восьми, получаем 432 байта. Тогда 100 массивов = 43 200 + 8 + 16 + 4 = 43 228. Выравниваем и получаем 43 232.

p.s я думал для начала записать инфо в arraylist считая ; за разделитель,после этого разбить каждое выражение в arraylist на 2 части и переписать это уже в String[] , размер которого будет Arraylist.size()*2; в четные ячейки я запишу то что слева от равно в нечетные то что справа .
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2017, 13:26
Ответы с готовыми решениями:

Какую лучше использовать БД для решения поставленной задачи
Добрый день, необходимо выбрать наиболее подходящую БД для реализации приложения для расчетов. Был...

Написать программу для решения задачи
Всем привет, помогите, пожалуйста написать программу для решения следующей задачи: в заданной...

Написать программу для решения задачи
Вот сама задача Нарушение пунктов 5.4, 5.18 правил форума. Закрыто.

Написать на С++ программу для решения задачи
Помогите написать код для решения задачи по нахождению радиуса круга, описанного вокруг треугольника

1
2 / 2 / 4
Регистрация: 10.01.2017
Сообщений: 7
17.01.2017, 21:50  [ТС] 2
Лучший ответ Сообщение было отмечено Scandal135 как решение

Решение

Вот код,если кому-то понадобится:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
import java.io.*;
import java.util.*;
 
 
public class My_class {
 
    My_class() {
        info = new ArrayList<String>();
        razmer = 0;
 
    }
 
    //формирует массив имен
    public void setMas_of_names(){
        mas_of_names=new String[razmer];
        for(int i=0;i<razmer;i++) {
            StringTokenizer st = new StringTokenizer(first[i], " []");
            st.nextToken();
            mas_of_names[i]=st.nextToken();
        }
        Arrays.sort(mas_of_names) ;
       // System.out.println(Arrays.toString(mas_of_names));
 
 
    }
 
    public void write_names(String a)throws IOException{
        PrintWriter pw=new PrintWriter(new FileOutputStream(a));
        for(int i=0;i<razmer;i++){pw.println(mas_of_names[i]);}
        pw.close();
    }
 
    public int count_of_elements_in_massiv(int n){
        int count=0;count+=mas_of_razmernost[n][0];
      for(int i=1;i<prostranstvo_massiva[n];i++){
          count*=mas_of_razmernost[n][i];
      }
      //  System.out.println(count);
        return count;
 
    }
 
    public int bytes_count(int n){
        int count=0;count+=mas_of_razmernost[n][0];
        int bytes=0;
        if(type_of_data[n].equals("int")==true){bytes=8+16+4+4*count;}
        if(type_of_data[n].equals("byte")==true){bytes=8+16+4+1*count;}
        if(type_of_data[n].equals("char")==true){bytes=8+16+4+16*count;}
        bytes=cratnost_8(bytes);
        for(int i=1;i<prostranstvo_massiva[n];i++){
            count=mas_of_razmernost[n][i];
            bytes=bytes*count+8+4+16;
            bytes=cratnost_8(bytes);
        }
        System.out.println(bytes);
        return bytes;
 
    }
 
    public int cratnost_8(int a){
        if(a%8==0)return a;
        else {
            a++;
            while(a%8!=0){a++;}
        }
        return a;
    }
 
    public void write_v_with_bytes(String a)throws IOException{
        PrintWriter pw=new PrintWriter(new FileOutputStream(a));
        Iterator<String> it=info.iterator();int n=0;
        while (it.hasNext()){
            pw.println(it.next().toString()+" - "+bytes_count(n)+" байт");
            n++;
        }
        pw.close();
    }
 
    /*public void write_names_with_count(String a)throws IOException{
        PrintWriter pw=new PrintWriter(new FileOutputStream(a));
 
    }*/
 
 
//чтение из файла и заполнение остальных полей
    public void read_from_file(String a) throws IOException {
        Scanner sc = new Scanner(new FileInputStream(a));
        while (sc.hasNext()) {
            String st = sc.nextLine();
            String arr[] = st.split(";");
            for (int i = 0; i < arr.length; i++) {
                info.add(arr[i]);
                razmer++;
            }
 
 
        }
        first = new String[razmer];
        second = new String[razmer];
        type_of_data = new String[razmer];
        mas_of_razmernost = new int[razmer][];
        has_new = new boolean[razmer];
        prostranstvo_massiva = new int[razmer];
        divide_on_two();
        setType_of_data();
        setProstranstvo_massiva();
        setMas_of_razmernost();
        setHas_new();
setMas_of_names();
 
    }
 
    //разбивает полученную строку на 2 части для удобной работы,считая = за разделитель
    public void divide_on_two() {
        for (int i = 0; i < info.size(); i++) {
            String st = info.get(i);
            String copy[] = st.split("=");
            first[i] = copy[0];
            second[i] = copy[1];
 
        }
    }
 
    public void setType_of_data() {
        for (int i = 0; i < first.length; i++) {
            if (first[i].contains("byte") == true) {
                type_of_data[i] = "byte";
            }
            if (first[i].contains("char") == true) {
                type_of_data[i] = "char";
            }
            if (first[i].contains("int") == true) {
                type_of_data[i] = "int";
            }
            if (first[i].contains("double") == true) {
                type_of_data[i] = "double";
            }
            if (first[i].contains("float") == true) {
                type_of_data[i] = "float";
            }
 
        }
    }
 
    //определяет какой n-мерности массив
    public void setProstranstvo_massiva() {
        for (int i = 0; i < first.length; i++) {
            for (int j = 0; j < first[i].length(); j++) {
                if (first[i].charAt(j) == '[') {
                    prostranstvo_massiva[i]++;
                }
            }
        }
    }
 
    //заполняет массив размерностей,например был массив [10][20]  и [5] получаем mas[][]={{10,20},{5}}
    public void setMas_of_razmernost() {
        int mas[]=new int[0];
        for (int i = 0; i < razmer; i++) {
           mas= read_razmer(i).clone();
            mas_of_razmernost[i] = new int[prostranstvo_massiva[i]];
 
            for (int j = 0; j < prostranstvo_massiva[i]; j++) {
                mas_of_razmernost[i][j] = mas[j];
                System.out.println(mas_of_razmernost[i][j]);
            }
            System.out.println("**");
        }
    }
 
    public void setHas_new() {
        for (int i = 0; i < razmer; i++) {
            if (second[i].contains("new") == true) {
                has_new[i] = true;
            } else has_new[i] = false;
        }
    }
//было [100][20] в string  получаем массив int с этой размерностью
    public int[] read_razmer(int i) {
        String copy;int mas[]=new int[prostranstvo_massiva[i]];int n=0;
        int l=0;int m=0; int count=0;
       for(int j=0;j<second[i].length();j++){
           if(second[i].charAt(j)=='['){
                l=j+1; m=j+1;
               while (second[i].charAt(m)!=']'){
                   m++;
               }
               copy=second[i].substring(l, m);
               mas[n]=Integer.parseInt(copy);
               n++;
 
           }
           if(second[i].charAt(j)=='{'){
               j++;
               while (second[i].charAt(j)!='}'){
                   if(second[i].charAt(j)==','){count++;}
                   j++;
               }
               mas[n]=count+1;
               n++;
           }
       }
        /*for(int j=0;j<prostranstvo_massiva[i];j++){
            System.out.println(mas[j]);
        }*/
        return mas;
    }
 
    private ArrayList<String> info;
    String first[];
    String second[];
    String type_of_data[];
    int mas_of_razmernost[][];
    int prostranstvo_massiva[];
    boolean has_new[];
    int razmer;
    String mas_of_names[];
}
 
 
 
 
 
import java.io.IOException;
 
 
public class Main {
    public static void main(String[] args) throws IOException{
        My_class my_class=new My_class();
        my_class.read_from_file("arrays.in");
        my_class.write_names("bytes1.out");
        my_class.write_v_with_bytes("bytes3.out");
 
    }
}
0
17.01.2017, 21:50
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2017, 21:50
Помогаю со студенческими работами здесь

Написать программу для решения задачи
Написать программу для решения задачи из определенной предметной области. Дано натуральное ...

Разработать класс для решения задачи начисления стипендии по итогам сессии
вот при сборке выводит ошибку в #include &quot;stdafx.h&quot; как мне ее исправить? #include &quot;stdafx.h&quot;...

Написать программу для решения след. задачи
Написать программу для решения след. задачи X=\begin{cases} 5* a +b &amp; \text{ , } a \gt b \\ ...

надо написать программу для решения задачи
надо к задаче написать программу на паскале

Написать программу для решения поставленной задачи
Сформировать односвязный список и вывести на экран полученную информацию. Дан список натуральных...

Нужно написать программу для решения задачи
За обедом 3 толстяка съели n количество пирожных. Первый толстяк съел n^1 пирожных. Второй в два...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru