2016-03-24 14 views
-2

Birkaç gün önce C öğrenmeye başladım ve bu basit görevle ilgili zorluklarım var.Dizideki bir çift çift sayıyı bulun ve bunların aralarında ortalamasını ekleyin

Yapmam gereken şey şudur: Ben bu kod yazı yazmıştı

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"); 
    } 
} 

O herhangi bir sorun olmadan konsolda başlar, ancak sonra sayılarla diziyi doldurmak,

: diziyi doldurduktan sonra

hata: Bu hatayı alacak Hata listesinde

hatalar: Ben hata yapmış

Errors in error list

?

+1

(Bunlar zaten işaret edilmiştir modifikasyonlara tabi) deneyin! Bakın [ask]. – Olaf

+0

Bir liste oluşturmayı mı düşündünüz? – Marievi

+0

Resim gönderemiyorum, bunun için 10 puana ihtiyacım var. Bunun için üzgünüm! @Mariei Ne tür bir liste? "FillArray" öğesinde – D3N1EL

cevap

1

bu metnin görüntüleri yayınlamayın

#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 gibi bir şeyleri kaçırdım. – D3N1EL