• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

Проблем со динамички низи во С

  • Ја почнал/а темата
  • #1

D3N1EL

Practice makes perfect
10 август 2010
2,907
1,496
Нижни Новгород, Русија
D3N1EL's setup  
Processor & Cooler
I3 3220 | Stock
Motherboard
Asus P8Z77m-PRO
Storage
Kingston A100 128GB, WD 500GB Cavier Green
PSU
Aerocool VX-650W
RAM
2x Kingston CL9 HyperX Blu 4GB
Video card
Asus AMD 7750 1GB
Case
CoolerMaster Elite 430
Mouse
A4Tech G10-810F
Keyboard
Logitech K270
Audio
AKG K518 DJ
Monitor
LG Ultrawide 25UM58-P
OS
Windows 10
Задачата е следна:
Во динамичка низа, да се најде пар парни броеви(кои стојат еден до друг) и меѓу нив да се вметне нивната средна вредност.
Проблемот кај мене произлегува после внесување на броеви во низата, добивам краш секој пат кога се повикува функцијата newArray - т.е. кога создавам нова матрица, во која ги копирам сите елементи од 0 до првиот парен број(од парот), вметнувам нивната средна вредност и ги копирам сите останати броеви од низата.

Код:
#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 *insertInArray(int *array, int *arraySize, int *bArraySize);

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: ");
    do {
        scanf_s("%d", arraySize);
        if (*arraySize < 2) {
            printf("Array size should be bigger than 2! \n");
            scanf_s("%d", arraySize);
        }
    } while (*arraySize < 2);

    // 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
            arraySize++;
            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;

   
    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");
}
 
  • Ја почнал/а темата
  • #2

D3N1EL

Practice makes perfect
10 август 2010
2,907
1,496
Нижни Новгород, Русија
D3N1EL's setup  
Processor & Cooler
I3 3220 | Stock
Motherboard
Asus P8Z77m-PRO
Storage
Kingston A100 128GB, WD 500GB Cavier Green
PSU
Aerocool VX-650W
RAM
2x Kingston CL9 HyperX Blu 4GB
Video card
Asus AMD 7750 1GB
Case
CoolerMaster Elite 430
Mouse
A4Tech G10-810F
Keyboard
Logitech K270
Audio
AKG K518 DJ
Monitor
LG Ultrawide 25UM58-P
OS
Windows 10
Решено. Може да се затвори темава.

Код:
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");
    }
}
 

gOJDO

Epic
23 јануари 2008
9,783
14,654
сред село
gOJDO's setup  
Processor & Cooler
Intel со вентилатор
Motherboard
Asus
Storage
полн
PSU
ЕВН Снабдување
RAM
алуминиумски
Video card
Super VGA
Case
closed
Mouse
хрчак домашен
Keyboard
механичка
Audio
сардисаунд
Monitor
телевизор у боја
OS
Windows
Пиши за тие што нема да сватат дека не ти беше иницијализирана вредноста на arraySize и дека се среди со доделување на вредност 0
 

Нови мислења

Последни Теми

Статистика

Теми
42,572
Мислења
820,885
Членови
28,235
Најнов член
NikolaJovcevski
На врв Дно