2016-03-24 2 views
-2

Я начал изучать C несколько дней назад, и мне трудно справиться с этой простой задачей.Найдите пару четных чисел в массиве и вставьте их среднее между ними

Что мне нужно сделать, это:

In dynamic array (all the numbers should be entered by the user) find a pair of even numbers and their average ((arr[i] + arr[i+1])/2)) should be added between that pair of even numbers

Я написал этот кусок кода:

#include "stdafx.h" 
int *fillArray(int *arraySize); 
int findPairs(int *array, int arraySize); 
int newArray(int *array, int arraySize, int avg, int avgPos); 
void printArray(int *array, int arraySize); 
int main() { 
    int *array; 
    int arraySize; 

    // Creating the array 
    array = fillArray(&arraySize); 

    // Printing the array, which was entered 
    printf("You just have entered this: \n"); 
    printArray(array, arraySize); 

    // Finding a pair of even numbers 
    findPairs(array, arraySize); 

    // Printing the new array 
    printf("The new array looks like this now! \n"); 
    printArray(array, arraySize); 

    free(array); 

    _getch(); 
} 

// Creating dynamicly allocated array 
int *createArray(int arraySize) { 
    int *array; 

    array = (int*) malloc (sizeof(int) * arraySize); 
    if (array == NULL) { 
     printf("No memmory avaible/n"); 
     exit(8); 
    } 

    return array; 
} 

// Function for filling the array with elements 
int *fillArray(int *arraySize) { 
    int *array = NULL; 

    // Array size 
    printf("Enter array size: "); 
    while (*arraySize < 2) { 
     scanf_s("%d", *&arraySize); 
     if (*arraySize < 2) { 
      printf("Array size should be bigger than 2! \n"); 
      scanf_s("%d", *&arraySize); 
     } 
    } 

    // Calling function for creating array 
    array = createArray(*arraySize); 

    // Filling the array with numbers 
    printf("Enter %d numbers: \n", *arraySize); 
    for (int i = 0; i < *arraySize; i++) { 
     scanf_s("%d", &array[i]); 
    } 

    return array; 
} 

// Function for finding pairs of even numbers 
int findPairs(int *array, int arraySize) { 
    int avg = 0, avgPos = 0; 

    for (int i = 0; i < arraySize; i++) { 
     if (array[i] % 2 == 0 && array[i + 1] % 2 == 0) { 
      avg = (array[i] + array[i + 1])/2; 
      avgPos = i + 1; 

      //Resizing the array size +1 position 
      *array = newArray(array, arraySize, avg, avgPos); 

      i++; 
     } 
    } 
    return *array; 
} 

// Function transfering into new array 
int newArray(int *array, int arraySize, int avg, int avgPos) { 
    int *newArr = NULL; 

    arraySize++; 
    newArr = createArray(arraySize); 

    // Copy all the elements from 0 to the first position of first pair even numbers 
    for (int i = 0; i < avgPos; i++) { 
     newArr[i] = array[i]; 
    } 

    // Add the average number between the even numbers 
    newArr[avgPos] = avg; 

    // Copy rest of the elements 
    for (int i = avgPos + 1; i < arraySize; i++) { 
     newArr[i] = array[i - 1]; 
    } 

    free(array); 

    return *newArr; 
} 

// Function for printing the array 
void printArray(int *array, int arraySize) { 
    for (int i = 0; i < arraySize; i++) { 
     printf("%d ", array[i]); printf("\n"); 
    } 
} 

Он начинается в консоли без каких-либо проблем, но после заполнения массива с номерами, вы получите эту ошибку:

ошибка после заполнения массива:

Error after filling the array

Ошибки в списке ошибок:

Errors in error list

Где я допустил ошибку?

+1

Не размещайте изображения текста! См. [Ask]. – Olaf

+0

Вы согласны создать список? – Marievi

+0

Я не могу опубликовать изображения, мне нужно 10 баллов за это. Извини за это! @Mariei Какой список? – D3N1EL

ответ

1

попробовать это (Те подвергаются модификации, которые уже указывали)

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

int *fillArray(int *arraySize); 
int *findPairs(int *array, int *arraySize); 
int *newArray(int *array, int arraySize, int avg, int avgPos); 
void printArray(int *array, int arraySize); 
int main() { 
    int *array; 
    int arraySize = 0; 

    // Creating the array 
    array = fillArray(&arraySize); 

    // Printing the array, which was entered 
    printf("You just have entered this: \n"); 
    printArray(array, arraySize); 

    // Finding a pair of even numbers 
    array=findPairs(array, &arraySize); 

    // Printing the new array 
    printf("The new array looks like this now! \n"); 
    printArray(array, arraySize); 

    free(array); 

    _getch(); 
} 

// Creating dynamicly allocated array 
int *createArray(int arraySize) { 
    int *array; 

    array = (int*) malloc (sizeof(int) * arraySize); 
    if (array == NULL) { 
     printf("No memmory avaible/n"); 
     exit(8); 
    } 

    return array; 
} 

// Function for filling the array with elements 
int *fillArray(int *arraySize) { 
    int *array = NULL; 

    // Array size 
    printf("Enter array size: "); 
    while (*arraySize < 2) { 
     scanf_s("%d", arraySize); 
     if (*arraySize < 2) { 
      printf("Array size should be bigger than 2! \n"); 
      scanf_s("%d", arraySize); 
     } 
    } 

    // Calling function for creating array 
    array = createArray(*arraySize); 

    // Filling the array with numbers 
    printf("Enter %d numbers: \n", *arraySize); 
    for (int i = 0; i < *arraySize; i++) { 
     scanf_s("%d", &array[i]); 
    } 

    return array; 
} 

// Function for finding pairs of even numbers 
int *findPairs(int *array, int *arraySize) { 
    int avg = 0, avgPos = 0; 

    for (int i = 0; i < *arraySize -1; i++) { 
     if (array[i] % 2 == 0 && array[i + 1] % 2 == 0) { 
      avg = (array[i] + array[i + 1])/2; 
      avgPos = i + 1; 

      //Resizing the array size +1 position 
      array = newArray(array, *arraySize, avg, avgPos); 
      ++*arraySize; 
      i++; 
     } 
    } 
    return array; 
} 

// Function transfering into new array 
int *newArray(int *array, int arraySize, int avg, int avgPos) { 
    int *newArr = NULL; 

    arraySize++; 
    newArr = createArray(arraySize); 

    // Copy all the elements from 0 to the first position of first pair even numbers 
    for (int i = 0; i < avgPos; i++) { 
     newArr[i] = array[i]; 
    } 

    // Add the average number between the even numbers 
    newArr[avgPos] = avg; 

    // Copy rest of the elements 
    for (int i = avgPos + 1; i < arraySize; i++) { 
     newArr[i] = array[i - 1]; 
    } 

    free(array); 

    return newArr; 
} 

// Function for printing the array 
void printArray(int *array, int arraySize) { 
    for (int i = 0; i < arraySize; i++) { 
     printf("%d ", array[i]); printf("\n"); 
    } 
} 
+0

Я пропустил что-то, вроде ++ * arraySize. Спасибо! – D3N1EL