Найдите Ошибку В Коде Пожалуйста

Тема в разделе "C/C++/C#", создана пользователем adelinamango, 10 апр 2014.

  1. adelinamango

    adelinamango New Member

    Регистрация:
    10 апр 2014
    Сообщения:
    3
    Симпатии:
    0
    Ввести массив целых чисел, количество элементов которого заранее не известно. Признаком конца ввода массива является ввод четырех чисел, дающих в среднем арифметическом 10. Вывести массив на экран
    Найдите и исправьте ошибку в коде пожалуйста

    Код (C++):
    #include <stdio.h>
    #include <iostream>
    #include <windows.h>

    int main (void)
    {
    int *a;//Массив
    int n=0, i=0, s4, j, x=0, sum=0;//Размерность

    printf("vvedite razmernost' massiva: ");
    scanf_s("%i",&n);

    a = (int*) malloc (n * sizeof(int)); // Выделяем массиву память.

    for (int i = 0;i<n;i++)
    {
    printf("a[%i] = ",i);
    scanf_s("%i",&a[i]);
    }
    {

    for(i=0;; i++) {

    a[i%4] = x;
    sum += x;
    if (i>=3) {
    for(s4=j=0; j<4; j++) s4 += a[j];
    if (s4==40) break;
    }
    }

    printf("%d\n", a[j]);}
    free(a);

    system("pause");
    return 0;
    }
     
  2. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Давненько сями не баловался.. Вот мой вариант решения "в лоб":
    Код (C++):
    #include <stdio.h>
    #include <iostream>
    #include <windows.h>

    // Размер шага для увеличения массива

    #define INCREMENT 4
    #define INT_SIZE sizeof(int)

    int main(void) {

    int* numbers = (int*)malloc(INT_SIZE * INCREMENT);
    int index = 0, size = INCREMENT;

    printf("Start entering numbers: \n");

    int keepRunning = 1;
    while(keepRunning) {
    // Увеличиваем размер массива, если чувствуем, что не помещаемся
    if (index + 1 == size) {
    // Создаем новый массив увеличенного размера
    int* tmp = (int*)malloc(INT_SIZE * (size + INCREMENT));
    // Копируем содержимое старого
    memcpy(tmp, numbers, size * INT_SIZE);
    // Старый удаляем, чтобы не терять память
    free(numbers);
    numbers = tmp;
    }

    scanf_s("%i", &numbers[index]);

    // Как только набралось хотя бы 4 элемента, можем начинать бегать по массиву
    // и проверять последние четыре значения
    if (index >= 3) {
    int sum = 0;
    for (int i = index - 3; i <= index; ++i) {
    sum += numbers[i];
    }

    if (sum == 40)
    keepRunning = 0;
    }

    index++;
    }

    // Ввод закончен, показываем массив
    printf("[");

    for (int i = 0; i < index; ++i) {
    printf("%i", numbers[i]);

    if (i < index - 1)
    printf(", ");
    }

    printf("]");

    free(numbers);

    return 0;
    }
     
  3. adelinamango

    adelinamango New Member

    Регистрация:
    10 апр 2014
    Сообщения:
    3
    Симпатии:
    0
    что такое keeprunning?)
     
  4. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Просто флажок, который используется в условии цикла. Пока он равен 1, приложение продолжает запрашивать элементы массива у пользователя. Когда сбрасывается в 0, цикл завершается, приложение переходит к показу введенного массива.
     
  5. adelinamango

    adelinamango New Member

    Регистрация:
    10 апр 2014
    Сообщения:
    3
    Симпатии:
    0
    благодарю вас!)
     
Загрузка...
Похожие Темы - Найдите Ошибку Коде
  1. fructus-temporum
    Ответов:
    1
    Просмотров:
    1.736
  2. alexey webware
    Ответов:
    1
    Просмотров:
    635
  3. vitte
    Ответов:
    17
    Просмотров:
    1.109
  4. deeeman
    Ответов:
    8
    Просмотров:
    946
  5. Serduko
    Ответов:
    13
    Просмотров:
    1.590

Поделиться этой страницей