Я начал изучать 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");
}
}
Он начинается в консоли без каких-либо проблем, но после заполнения массива с номерами, вы получите эту ошибку:
ошибка после заполнения массива:
Ошибки в списке ошибок:
Где я допустил ошибку?
Не размещайте изображения текста! См. [Ask]. – Olaf
Вы согласны создать список? – Marievi
Я не могу опубликовать изображения, мне нужно 10 баллов за это. Извини за это! @Mariei Какой список? – D3N1EL