• Как хранить и считывать записи из файлов?

    Для сериализации данных, для работы с файлами, используйте pickle или json.

    У вас будет массив значений key-value. С массивом можете использовать любой алгоритм поиска (например последовательный) и сортировки (например пузырьком).
    Ответ написан
    Комментировать
  • Как сформировать массив записей в Python?

    @beckmiller
    Вот примеры : В первом случае лист во стором словарь. В первом случае обращение через индексы l_list[0][1] вернет имя и т.д. может Вам еще подскажут. Удачи!
    l_list= [['Alex','Geography',5], ['Lex', 'Biology', 4]]
    print(l_list)
    [['Alex', 'Geography', 5], ['Lex', 'Biology', 4]]
    print(l_list[0])
    ['Alex', 'Geography', 5]

    e = {'Name': 'Alex', 'Biology': 5, 'Geography': 4}
    print(e['Name'])
    'Alex'
    Ответ написан
    Комментировать
  • Как сформировать массив записей в Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    В Python есть словари и списки
    students = [
        {
            'first_name': 'Иван',
            'last_name': 'Иванов',
            'grades': {
                'math': 3,
                'chemistry': 5,
                'literature': 4
            }
        },
        {
            'first_name': 'Пётр',
            'last_name': 'Петров',
            'grades': {
                'math': 5,
                'chemistry': 4,
                'literature': 3
            }
        }
    ]

    Работа с базовыми структурами данных описывается обычно в первой же главе любого учебника.
    Ответ написан
    2 комментария
  • Как разобраться в архитектуре ЭВМ?

    @shmool
    Senior Hardware Engineer
    Почитайте про Микрокод на Википедии, еще вот эту статью https://habr.com/post/427757/ . Там есть ответы на ваши вопросы.
    Ответ написан
    Комментировать
  • Почему не приходят обновления Win10 (1809)?

    @res2001
    Developer, ex-admin
    Ждите, до всех дойдет очередь :-)
    Ответ написан
    Комментировать
  • Как можно узнать количество нулей в числе?

    Вычислить логарифм по основанию 10.

    10^x = a
    x = log10(a)
    Ответ написан
    Комментировать
  • Как можно узнать количество нулей в числе?

    0xD34F
    @0xD34F
    int count = 0;
    while (val >= 10) {
      count++;
      val /= 10;
    }


    Интересуют только числа вида 10 в степени "кол-во нулей".

    Если вдруг заинтересуют и другие - замените count++ на что-то вроде count += val % 10 ? 0 : 1.
    Ответ написан
    Комментировать
  • Как работать с делением и типами в Си?

    GavriKos
    @GavriKos
    Если хотите, чтобы деление "учитывало" возможную дробную часть, то:
    - всегда в делении одно из чисел должно быть float (double)
    - всегда результат помещать в float (double)
    Ответ написан
    Комментировать
  • Как работать с делением и типами в Си?

    @res2001
    Developer, ex-admin
    Заранее не известно же каким будет результат, целым или вещественным.

    Если есть шансы, что результат вычислений может быть не целым (и вам реально нужен вещественный результат в этом случае, т.е. с остатком), то нужно использовать вещественные операции для вычисления выражения, а не целые.
    Часто бывает необходимо отбрасывать остаток, тогда намеренно используют целочисленную арифметику.

    В отличии от языков с динамической типизацией, в С/С++ программист сам должен контролировать тип результата выражения и там где нужно делать преобразования типов явно для получения результата нужного типа.
    И это не недостаток языка.
    Ответ написан
    Комментировать
  • Актуальные книги по js?

    aRegius
    @aRegius
    Python Enthusiast
    Вся актуальная литература есть только на Amazon. Вот, например, книги по JavaScript тематике, отсортированные по дате выхода (с учетом планируемых).

    Также, на заметку, издательство O’Reilly предлагает в открытом доступе ряд материалов для изучения, а издательство Packt раз в сутки выкладывает для бесплатного доступа рандомные книги - можно мониторить на предмет актуальности исходя из личных потребностей.

    Крайне редко вы встретите актуальный русскоязычный аналог, да еще с толковым переводом. Поэтому, я бы делал ставку на английский - это ваша дополнительная степень свободы относительно доступа к самой новой и качественной информации на рынке.
    Ответ написан
    1 комментарий
  • Как разобраться с указателем на указатель на массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что происходит в данном случае
    int ** ptr = &arr;

    Происходит initialization from incompatible pointer type.

    Получается что далее ptr == arr == &arr

    == использованное в смысле "численно равно" действительно имеет место. Но типы этих трёх значений разные: int **/int[4]/int (*)[4]

    Почему нельзя получить указатель на указатель на массив в данном случае?

    Потому что, чтобы получить указатель на указатель, надо этот второй указатель иметь. Массив -- это не указатель.
    Вот так будет работать:
    #include <stdio.h>
    
    int main(void)
    {
      int arr[4] = {1, 2, 3, 4};
      int *pa = arr;
      int ** ptr = &pa;
    
      printf("%d", **ptr); // 1
      return 0;
    }
    Ответ написан
    Комментировать
  • Почему выводится некорректное значение вещественного числа?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему если считывать число как long double, то результат получается нормальным,
    input 2 => output 8.000000 (%lf)

    потому что в scanf %lf -- это не long double, а просто double. %f -- это float, а long double -- это %Lf. См. man scanf.
    float и double обычно отличаются форматом представления, поэтому если вводить число не тем форматом scanf, то и значение получится не то, что ожидалось.
    Ответ написан
    Комментировать
  • Почему не работает программа вывода двух строк?

    myjcom
    @myjcom
    по простому:
    char first_name[40] - резервируется память для 40 байт.

    typedef char * string; 
    string first_name; - это просто указатель, причем неинициализированный.

    scanf("%s %s", first_name, last_name); - это обращение 
    к неинициализированному указателю (undefined behaviour)
    Ответ написан
    2 комментария
  • Как записать число в файл в двоичном режиме?

    @GrigorySvetov
    1. Если про бинарный вывод (т.е. когда сам символ смысловой нагрузки не несет, а несет номер символа в кодировке) ("настоящий" бинарный вывод).

    Основной прикол в том, что массив в Си можно понимать как просто указатель на фиксированный по размеру набор значений, а саму переменную массива - как указатель на этот набор.
    И действительно, так привычное нам обращение по индексу arr[i] в Си переводится в *(arr+i) (разыменование по указателю со смещением).
    Поэтому когда мы пишем fwrite(arr, ...), на самом деле мы пишем туда УКАЗАТЕЛЬ. В остальном Си достаточно всё равно, что происходит (главное чтобы без выходов на чужую память, иначе тут уже система убьет процесс). Т.е. мы передаем указатель на ЧИСЛО (одно число) как будто это целый массив, дальше всё честно для него пишем. Код получается вот такой:
    #include <stdio.h>
    int main(){
    	FILE *fp;       //переменная файлового потока
    	int value=11;   //наша переменная с числом
    	fp=fopen("output.txt","wb");//открываем файл на перезапись ('w') в бинарном режиме ('b' в "wb")
    	if (fp==NULL){            	     //если файл не был открыт, то...
    		perror("file hadn't opened");//вывести в поток ошибок сообщение (обычно это то же, что поток вывода (т.е. экран компьюетра)
    
    	} else {                            //иначе..
    		fwrite(&value,sizeof(int),1,fp); //вывести значение как массив с единственной ячейкой
    	}
    	fclose(fp);//закрыть в любом случае (если fp==NULL, ошибкой всё равно не будет, а читается удобнее, чем все эти ветки if'ов
    	return 0;
    }


    2. Если про то, что в комментарии, т.е. с ноликами и единичками в файле... Это "ненастоящий" бинарный режим, т.к. каждый символ '0' и '1' - это правда честные отдельные символы, которые надо читать как текст. В этом случае, я думаю, Вы просто это число побитно обрабатываете и fputc()'ом загоняете (но fopen() будет уже таким: fopen("<имя файла в форме строки>", "w"); (а не fopen("<имя файла в форме строки", "wb");)
    Ответ написан
    1 комментарий
  • В какой директории хранить файл для считывания из программы?

    myjcom
    @myjcom
    С:\\Projects\\myProject\\Debug\\file.txt    == ..\\debug\\file.txt
    С:\\Projects\\myProject\\Release\\file.txt  == ..\\release\\file.txt
    С:\\Projects\\myProject\\Other\\file.txt    == ..\\other\\file.txt
    С:\\Projects\\myProject\\file.txt           == ..\\file.txt
    ...
    fopen("..\\file.txt", "r")


    Мне нужно чтобы при передаче файла не нужно было писать какой либо длинный путь, а просто можно было бы передать имя файла.

    spoiler
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <direct.h>
    
    char* get_file_path(char* dir, char* fname)
    {
        dir = _getcwd(dir, MAX_PATH);
        strcpy(&dir[strlen(dir)], "\\");
        strcpy(&dir[strlen(dir)], fname);
        return dir;
    }
    
    int main(int argc, char* argv[])
    {
        /* uncomment
        if(argc != 1)
        {
            printf("error: usage myapp.exe file.txt\n");
            return -1;
        }
        uncomment */
        char  dir[MAX_PATH];
        char* file = "file.txt";//test
        char* full_file_name = get_file_path(dir, file);// get_file_path(dir, argv[0])
        FILE* fp = fopen(full_file_name, "r");
    
        if(fp)
        {
            printf("Open\n");
            fclose(fp);
        }
    
        printf("%s", full_file_name);
        free(full_file_name);
        return 0;
    }

    gcc -static
    Ответ написан
    2 комментария
  • В каком случае будет достигнут "конец файла" при считывании данных с клавиатуры?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Стандартный признак конца файла - Ctrl+Z. В Windows надо ещё нажать Enter или Ctrl+M.
    Ответ написан
    1 комментарий
  • Как sizeof вычисляет размер массива?

    @res2001
    Developer, ex-admin
    sizeof - это не функция (хоть и выглядит похоже) - это операция взятия размера.
    sizeof всегда вычисляется на этапе компиляции, т.е. в исполняемом файле вместо вызова sizeof уже будет вычисленная константа.
    Когда компилятор знает размер массива, как в вашем примере, он вернет полный размер массива.
    Но если передать в sizeof произвольный указатель (именно указатель, а не статический массив), он вернет размер указателя.

    Статический массив - это не указатель. Указатель - на этапе выполнения занимает в памяти место для хранения адреса. Статический массив занимает в памяти место для хранения данных массива.
    Поэтому статический массив - это не указатель. Хотя часто компилятор работает с именем статического массива как с указателем.
    Ответ написан
    8 комментариев
  • Как сохранять динамически добавляемые блоки при перезагрузке страницы?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    LocalStorage
    Ответ написан
    Комментировать
  • Как динамически указать длину поля для вывода в printf?

    @res2001
    Developer, ex-admin
    1.Можете просто сформировать правильную Си строку, добавив в конце нулевой символ, тогда printf правильно сработает при спецификаторе формата %s.
    2.Если у вас не строка, а байтовый массив (т.е. нет завершающего нулевого символа), тогда можно следующим образом: printf("%.*s", (int)len, str)
    Ответ написан
    2 комментария
  • Почему "ошибка", а не "undefined"?

    rockon404
    @rockon404
    Frontend Developer
    В строгом режиме будет ошибка.

    Перед началом прохождения теста внизу страницы приведен список пояснений:
    5b75d0748abda042496138.png
    Ответ написан
    Комментировать