Files
college-C/12/ex6.c
2022-02-25 15:33:16 +02:00

116 lines
2.8 KiB
C

#include "PointersLibs.h"
#include <stdio.h>
#include <malloc.h>
void Swap(int *num1, int *num2)
{
//swaps between two numbers
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
void SortMat(int *mat,int max_size)
{
//sorts them by ascending order
for (int count = ZERO; count < max_size; count++)
{
for (int counter = count + ONE; counter < max_size; counter++)
{
(*(mat + count) > *(mat + counter)) ?
Swap((mat + count) ,(mat + counter)): ZERO;
}
}
}
void Switcharoo(int *begin,int *stop)
{
//switches between numbers in a certain
while (stop > begin)
{
int temp = *begin;
*begin = *stop;
*stop = temp;
stop--;
begin++;
}
}
void Special_Print_for_sixth(int *mat,int size)
{
//special print for ex 6
int amnt = size*size;
for (int count = ZERO; count < size; count++)
{
for (int counter = count; counter < size*size; counter += size)
{
printf("%d ", *(mat + counter));
}
printf("\n");
}
}
void PutIn(int *mat,int num,int N)
{
*mat = num;
int maxsize = N * N;
SortMat(mat,maxsize);
for (int count = ZERO; count < maxsize; count++)
{
//switches the even rows values places
//so that when you print it shows ok
((count / N) % TWO == ONE) ? Switcharoo((mat + count), (mat + count + N - ONE)) : ZERO;
((count / N) % TWO == ONE) ? count += N - ONE : ZERO;
}
}
//---------------------------------------------------------------------------------------
// exe 6
// -----
//
// General : the program sorts the numbers in an ascending order
// and then adds a number that is desiered to the matrix, sorts it
// again.
//
// Input : size o the matrix, and N^2 of numbers.
//
// Process : sorts in ascending order and then sorts them according to the wanted way.
//
// Output : prints the new matrix.
//
//---------------------------------------------------------------------------------------
// Proggramer : Cohen Idan
// Student No : 211675038
// Date : 22.11.19
//---------------------------------------------------------------------------------------
void main(void)
{
int N = ZERO;
int *mat = (int*)malloc(sizeof(int));
printf("enter Size: ");
scanf("%d", &N);
int maxsize = N * N;
int num = ZERO;
for (int sofer = ZERO; sofer < maxsize; sofer++)
{
mat = realloc(mat, sizeof(int)*(sofer+ONE));
printf("enter no.%d: ",sofer+ONE);
scanf("%d", &(*(mat+sofer)));
}
SortMat(mat,maxsize);
for (int count = ZERO; count < maxsize; count++)
{
//switches the even rows values places
//so that when you print it shows ok
((count / N) % TWO == ONE) ? Switcharoo((mat + count), (mat + count + N - ONE)) : ZERO;
((count / N) % TWO == ONE) ? count += N - ONE : ZERO;
}
Special_Print_for_sixth(mat, N);
printf("enter number to enter: ");
scanf("%d", &num);
PutIn(mat, num, N);
Special_Print_for_sixth(mat, N);
free(mat);
}