Имя: Пароль:
1C
 
Исправить ошибки в коде
🠗 (Волшебник 26.08.2022 17:29)
0 Andreik113
 
26.08.22
12:33
Всем привет. Помогите решить тестовое задание на стажера-программиста 1С. Почему дали из другого языка - не пойму
Функция AllNames() возвращает массив с
произвольными именами.
int function FindPetya() {
Ar_names = AllNames();
Number = 0;
while (Ar_names.count() > 0) {
if (Ar_names[0] == “Петя”) {
Number = counter; }
else {
counter++;
Ar_names.Delete(Ar_names[0]); }
}
return 100 / Number * 25;
}
1 H A D G E H O G s
 
26.08.22
12:37
Вам в этой организации делать нечего да и не стоит.
2 Kassern
 
26.08.22
12:37
(0) Бред конечно таким способом стажеров проверять. Задания для стажёров проверяют ваш уровень знаний и сообразительность, а не форумчан.
3 Фрэнки
 
26.08.22
12:39
это ему в таком виде тест дают на стрессовую устойчивость
4 alarm2020
 
26.08.22
12:39
(0) Деление на ноль обойди, вот и все задание
5 Kassern
 
26.08.22
12:39
Мне просто интересно, а как вы его решать собираетесь? Вам дают массив имен, а вы должны ответ этой функции сказать?
6 alarm2020
 
26.08.22
12:39
(5) Надо исправить ошибку в коде.
7 Kassern
 
26.08.22
12:43
(6) Понял. Но вообще функция бредово написана. Зачем удалять данные из массива, почему просто не обойти сам массив? И что будет, когда несколько петей будет в массиве? Если нужен только один, тогда зачем дальше цикл гонять? В общем переписать надо эту функцию
8 Фрэнки
 
26.08.22
12:43
там еще нет начального значения
counter

Но может оно и не нужно. Не помню уже обязательные требования к коду, но похоже, что переменные Number и counter здесь без вызова конструкторов
9 Фрэнки
 
26.08.22
12:45
while (Ar_names.count() > 0)

тоже какой-то неведомый кусок
10 alarm2020
 
26.08.22
12:45
(8) Точно. И counter инициализировать
11 Kassern
 
26.08.22
12:46
(9) ага, такое ощущение, что это бесконечный цикл, типа Пока Количество в массиве больше 0 цикл
12 Kassern
 
26.08.22
12:46
Вот он срезает данные, если пети нет, но если есть петя, тогда он строчку не удалить и будет бесконечный цикл
13 СеменовСемен
 
26.08.22
12:47
Counter не инициализировпн
14 Kassern
 
26.08.22
12:48
Вердикт -> цикл в топку, как и саму функцию. Если функция называется НайтиПетю, то она и должна возвращать Петю (его идентификатор), а не какую-то кривую формулу с потолка.
15 Kassern
 
26.08.22
12:53
Вашим работодателям нужно было переписать эту функцию на язык 1с. Тогда было бы более приемлемо:

Процедура НайтиПетю()
    
    МассивИмен=ПолучитьМассивСлучайныхИмен();
    Номер=0;
    Пока МассивИмен.Количество()>0 Цикл
        Если МассивИмен[0]="Петя" Тогда
            Номер=Индекс;
        Иначе
            Индекс=Индекс+1;
            МассивИмен.Удалить(МассивИмен[0]);
        КонецЕсли;
    КонецЦикла;
    
    Возврат 100/Номер*25
        
КонецПроцедуры
16 Kassern
 
26.08.22
12:54
Вот теперь любитесь с функцией этой)
17 Kassern
 
26.08.22
12:58
(15)  в место процедуры ->функция конечно, очепятался)
18 Andreik113
 
26.08.22
13:02
(17) Легче не стало)
{МодульУправляемогоПриложения(145,19)}: Переменная не определена (Индекс)
            Номер=<<?>>Индекс; (Проверка: Тонкий клиент)
{МодульУправляемогоПриложения(141,16)}: Процедура или функция с указанным именем не определена (ПолучитьМассивСлучайныхИмен)
    МассивИмен=<<?>>ПолучитьМассивСлучайныхИмен(); (Проверка: Тонкий клиент)
19 Serg_1960
 
26.08.22
13:03
(16) А на что любоваться? Если Петя будет среди имён - мы вечно будем на это любоваться :))
20 H A D G E H O G s
 
26.08.22
13:09
(18) Воспрянь! Каста Эфирилов укажет дорогу.
21 Andreik113
 
26.08.22
14:34
так что мне с этим делать? коллеги, помогите)
22 Kassern
 
26.08.22
14:36
(21) Прочитать задание еще раз и хорошо подумать. Найти нестыковки в коде и дать развернутый ответ. Напоминаю, что проверяются именно ВАШИ знания. Здесь итак уже много, что написали в плане подсказок.
23 alarm2020
 
26.08.22
14:36
(21) Исправлять ошибки. Тебе их уже все нашли. Что еще надо?
24 H A D G E H O G s
 
26.08.22
15:07
(21) Слушай и запоминай, мой воин, учись методам войны не у тех, кто воюет для развлечения или получения удовольствия, а у тех, кто воюет во имя общей цели. Это - предостерегающий рассказ, который вдохновит многих на благотворный труд во имя Высшего Блага.
25 СеменовСемен
 
26.08.22
15:08
(24) ты запас грибов с волги привез что-ли?
26 Serg_1960
 
26.08.22
15:09
(23) "Что еще надо?" - осталось только правильно определить язык программирования примера :) Чтобы удалить синтаксические ошибки.

Мне, например, кажется что строка "while (Ar_names.count() &gt; 0)" написана с ошибкой и должно быть "while (Ar_names.count() -gt 0)"...
27 H A D G E H O G s
 
26.08.22
15:10
(25) "Я многое пережил не для того, чтобы смеяться над действиями чужих или ненавидеть их, а для того чтобы понимать их". Аун’Ши
28 Kassern
 
26.08.22
15:12
(26) это все ерунда, хотя бы логические ошибки пусть ТС озвучит. Не думаю, что на стажера 1с, нужно знать синтаксис жабыскрипт и еже с ними.
29 Kassern
 
26.08.22
15:12
*иже
30 Serg_1960
 
26.08.22
15:13
(25) Съедобные грибы, под воздействием высоких температур, могут мутировать до состояния галлюциногенных...
31 Eiffil123
 
26.08.22
15:26
Переписать так:

int function FindPetya() {

Ar_names = AllNames();

Number = Ar_names.Find("Петя");

if (Number > 0) return 100 / Number * 25;
return 0;

}
32 Kassern
 
26.08.22
15:28
(31) А если несколько "Петя" будет в массиве?)
33 Kassern
 
26.08.22
15:30
В любом случае, мне не верится, что ТС понял, что в коде написано и какие были ошибки. Банальный вопрос на собеседовании по этому коду и все - приплыли.
34 VladZ
 
26.08.22
15:45
(0) Православный код должен быть на русском языке.
Так и скажи: Это дичь какая-то! Дайте нормальный код!
35 Фрэнки
 
26.08.22
15:49
а откуда известно, что Ar_names можно указать с методом Find ?
Или параметр она разрешает использовать именно в виде строки "Петя" ?

Тут даже не известно на каком языке программирования этот код был написан.
Только примерно можно догадаться, что это С++ или что-то к нему близкое, но я не удивлюсь, если не угадал
36 Eiffil123
 
26.08.22
16:03
(32) значит первого выводим. только вопрос, а что вообще функция должна возвращать?
37 Kassern
 
26.08.22
16:06
(36) "а что вообще функция должна возвращать?" - сферического коня в вакууме конечно. Это задачка имхо, чтобы определить насколько ТС в программировании разбирается, может какие-то языки изучал ранее, либо на институтском уровне, что-то помнит. Скорее всего ему нужно было озвучить, что примерно эта функция делает и какие у него основные ошибки.
38 Andreik113
 
26.08.22
16:14
Прошу прощения в коде была у меня ошибка, вместо &gt; 0 знак ">"
Ar_names = AllNames();
Number = 0;
while (Ar_names.count() > 0) {
if (Ar_names[0] == “Петя”) {
Number = counter; }
else {
counter++;
Ar_names.Delete(Ar_names[0]); }
}
return 100 / Number * 25;
}
39 Eiffil123
 
26.08.22
16:45
(37) я вот это до сих пор не понимаю: return 100 / Number * 25;
40 Eiffil123
 
26.08.22
16:45
(39) судя по тому, что эту строку никто не трогает в своих решениях - ее никто не понимает
41 Andreik113
 
26.08.22
16:54
(40) это выражение не 0 возвращает?
42 Kassern
 
26.08.22
16:55
(41) 100/x*25 при каких x сможет 0 вернуть?
43 Фрэнки
 
26.08.22
16:57
Летело Х гусей.
не... Х будет мало
Летело 2Х гусей
44 Arbuz
 
26.08.22
17:22
(43) Не мало, гусей было Δ₀XY∛A
45 alarm2020
 
26.08.22
17:27
(39) Просто замаскировали потенциальное деление на ноль. Так оно не сразу в глаза бросается
46 Kassern
 
26.08.22
17:32
(45) могли бы по изящней это сделать, например: процент заполнения Петями в массиве и тому подобное. Да и функцию бы обозвали в этом ключе.