My tasks was to write a program which finds difference between two arrays (elements which are in first array but not in second and vice-versa).
Program works, but something wrong is with the memory allocation for array.
My code is:
main.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
int main()
{
int n, m;
printf("Iveskite pirmo masyvo ilgi: ");
scanf("%d", &n);
int *Mas;
Mas = (int*) malloc (sizeof(int) * n);
printf("Iveskite pirmo masyvo elementus: ");
Skaito(Mas, n);
printf("\n\nIveskite antro masyvo ilgi: ");
scanf("%d", &m);
int *Mas_2;
Mas_2 = (int*) malloc (sizeof(int) * m);
printf("Iveskite antro masyvo elementus: ");
Skaito(Mas_2, m);
Raso(Mas, n);
Raso(Mas_2, m);
int *Skirt;
Skirt = (int*) malloc (sizeof(int));
int kiek = 0;
kiek = Skirtumas(Skirt,Mas,Mas_2,n,m,kiek);
kiek = Skirtumas(Skirt,Mas_2,Mas,m,n,kiek);
Raso(Skirt,kiek);
return 0;
}
header.h
function "ar_buvo" checks if certain element is already inserted in difference's array.
function "ar_tinka" checks if certain element meets requirements.
Counts how many certain elements are in first and second arrays then counts difference.
function "Skirtumas" makes difference's array: allocates memory and etc.
Code:
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
int ar_buvo (int *A, int kiek, int reiksme);
void Raso (int *A, int kiek);
void Skaito (int *A, int kiek);
int ar_tinka (int reiksme, int *A1, int *A2, int n, int m);
int Skirtumas (int *Skirt, int *A1, int *A2, int A1_ilgis, int A2_ilgis,int kiek);
#endif // HEADER_H_INCLUDED
func.c
Code:
#include <stdio.h>
#include <stdlib.h>
int ar_buvo (int *A, int kiek, int reiksme)
{
int i;
int buvo_nebuvo = 0;
if (kiek == 0)
{
buvo_nebuvo = 0;
}
else
{
for (i = 0; i < kiek; i++)
{
if (reiksme == A[i])
{
buvo_nebuvo = 1;
}
}
}
return buvo_nebuvo;
}
void Raso (int *A, int kiek)
{
int i;
for (i = 0; i < kiek; i++)
{
printf("%d ",A[i]);
}
printf("\n");
}
void Skaito (int *A, int kiek)
{
int skc, i;
for (i = 0; i < kiek; i++)
{
scanf("%d", &skc);
A[i] = skc;
}
}
int Skirtumas (int *Skirt, int *A1, int *A2, int A1_ilgis, int A2_ilgis, int kiek)
{
int i, j;
for (i = 0; i < A1_ilgis; i++)
{
if (ar_buvo(Skirt, kiek, A1[i])==0)
{
int kiek_2 = ar_tinka(A1[i], A1, A2, A1_ilgis, A2_ilgis);
for (j = kiek; j < (kiek + kiek_2); j++)
{
Skirt = (int*) realloc (Skirt, sizeof(int));
Skirt[j] = A1[i];
}
kiek = kiek + kiek_2;
}
}
return kiek;
}
int ar_tinka (int reiksme, int *A1, int *A2, int n, int m)
{
int kiek = 0;
int kiek_1 = 0;
int kiek_2 = 0;
int i;
for (i = 0; i < n; i++)
{
if (A1[i] == reiksme)
{
kiek_1++;
}
}
for (i = 0; i < m; i++)
{
if (A2[i] == reiksme)
{
kiek_2++;
}
}
if (kiek_1 > kiek_2)
{
kiek = kiek_1 - kiek_2;
}
else
{
kiek = kiek_2 - kiek_1;
}
return kiek;
}