Files
ikcu-yzm/YZM502/final-soru2.c
2023-04-02 23:22:23 +03:00

136 lines
3.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
void diziYaz(int dizi[], int diziUzn, char baslik[]) {
int i;
printf("\n%s:\t", baslik);
for (i = 0; i < diziUzn; i++) {
printf("%d\t", dizi[i]);
}
}
float ortalama(int dizi[], int diziUzn) {
int i;
float toplam = 0;
for (i = 0; i < diziUzn; i++) {
toplam += dizi[i];
}
return (toplam / diziUzn);
}
int *siralaAzalan(int dizi[], int diziUzn) {
static int* yeniDizi;
yeniDizi = (int*)malloc(diziUzn * sizeof(int));
int i, j, tmp;
for (i = 0; i < diziUzn; i++) {
yeniDizi[i] = dizi[i];
}
for (i = 0; i < diziUzn; i++) {
for (j = 0; j < diziUzn - i - 1; j++) {
if (yeniDizi[j] < yeniDizi[j + 1]) {
tmp = yeniDizi[j];
yeniDizi[j] = yeniDizi[j + 1];
yeniDizi[j + 1] = tmp;
}
}
}
return yeniDizi;
}
int maxDegerIndex(int dizi[], int diziUzn) {
int maxDeger, maxDegerIndex, i;
maxDegerIndex = 0;
maxDeger = 0;
for (i = 0; i < diziUzn; i++) {
if (dizi[i] > maxDeger) {
maxDeger = dizi[i];
maxDegerIndex = i;
}
}
return maxDegerIndex;
}
int enYakinDeger(float hedef, int *dizi, int diziUzn) {
float fark = 100;
int i, enYakin;
for (i=0; i< diziUzn; i++) {
if (fabsf(hedef - dizi[i]) < fark) {
fark = fabsf(hedef - dizi[i]);
enYakin = dizi[i];
}
}
return enYakin;
}
void main() {
int c;
int isRassal = 0;
while (1) {
printf("\nNot değerleri rassal üretilsin mi? (E/h): ");
c = getchar();
//printf("\n%d\n", c);
if ((c == 69) || (c == 101) || (c == 32) || (c == 10)) {
isRassal = 1;
break;
}
if ((c == 72) || (c == 104)) {
isRassal = 0;
break;
}
if (c == 27) {
printf("\nProgram sonu");
return;
}
}
int notlar[2][10]; //ders x ogrenci --> Ders Index 0: mat, 1: fiz
int i;
if (isRassal) {
srand(time(NULL));
for (i = 0; i < 10; i++) {
notlar[0][i] = rand() % 100;
notlar[1][i] = rand() % 100;
}
} else {
for (i = 0; i < 10; i++) {
printf("\n%d. öğrencinin matematik notu: ", i + 1);
scanf("%d", &notlar[0][i]);
printf("\n%d. öğrencinin fizik notu: ", i + 1);
scanf("%d", &notlar[1][i]);
}
}
float ortMat, ortFiz;
int topMat, topFiz;
printf("\nGirilen Değerler: \n----------------------------------------------");
diziYaz(notlar[0], 10, "Mat");
diziYaz(notlar[1], 10, "Fiz");
printf("\n\nSonuçlar: \n----------------------------------------------");
// Fizik ve matematik dersi not ortalaması hesaplayınız.
printf("\nMat ortalaması: %2.2f", ortalama(notlar[0], 10));
printf("\nFiz ortalaması: %2.2f", ortalama(notlar[1], 10));
// Fizik nptlarını azalan sıra ile yazınız
diziYaz(siralaAzalan(notlar[1], 10), 10, "Fizik Notları Azalan");
// Fizik dersinden en yüksek not alan öğrencinin matematik dersi notunu yazınız.
printf("\nFizikten en yüksek not alan öğrencinin Mat Notu : %d", notlar[0][maxDegerIndex(notlar[1], 10)]);
// Matematik not ortalamasına en yakın notu olan öğrencinin Matematik notunu yazınız.
printf("\nMatematik not ortalamasına en yakın notu olan öğrencinin Matematik notu : %d", enYakinDeger(ortalama(notlar[0], 10), notlar[0], 10));
}