Cześć. Dzisiaj pisałem kolokwium, niestety nie zdałem bo program nie działa :) Większość funkcji działa tak jak powinna ale jednak coś jest nie tak. Polecenie:
Napisz program, który uzupełni tablicę liczbami całkowitymi z zakresu od -15 do 10. Rozmiar tablicy ma być wprowadzony przez użytkownika i nie może być mniejszy niż 15 i nie większy niż 25. Elementy tablicy mają być w ten sposób wyświetlone, że pierwsza połowa będzie zawierać liczby pseudolosowe zwiększone o wartość 5 i posortowane malejąco, zaś druga będzie zawierać elementy ciągu arytmetycznego. Pierwszy element ciągu arytmetycznego ma być losowany z zakresu od -15 do 10, a jego różnica ma być podawana przez użytkownika.
Funkcji sprawdzającej czy rozmiar jest dobry jeszcze nie napisałem bo chciałem sprawdzić czy wszystkie główne funkcje działają. Wszystkie działają oprócz sortowania pierwszej połowy tablicy (czasami działa, czasami nie) ale kiedy wprowadzam rozmiar tablicy większy niż 12 to wyświetla mi mniej elementów albo w ogóle ich nie wyświetla (Nie mam pojęcia dlaczego). Podpowiecie co robię źle? Dzięki :)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
void uzupelnij_tablice (char *tab, int *rozmiar)
{
srand(time(NULL));
for(int i=0; i < *rozmiar; i++)
tab[i]=-15 + rand()%26;
}
void wyswietl_tablice (char *tab, int *rozmiar)
{
int i;
for(i=0; i < *rozmiar; i++)
printf("A[%d] = %d\n",i,tab[i]);
}
void swap (int *first, int *second)
{
int schowek = *first;
*first = *second;
*second = schowek;
return;
}
void pierwsza_polowa_plus_5 (char *tab, int *rozmiar)
{
int srodek = *rozmiar/2;
for(int i=0; i <= srodek-1; i++)
tab[i]=tab[i]+5;
}
void sortuj_pierwsza_polowa (char *tab, int *rozmiar)
{
for(int i=1;i<*rozmiar/2;i++)
{
int max=i-1;
for(int j=i; j<*rozmiar/2 ; j++)
if(tab[max]<tab[j])
max=j;
swap(&tab[i-1], &tab[max]);
}
}
void arytmatyczny_druga_polowa(char *tab, int *rozmiar)
{
srand(time(NULL));
int i,r,a;
a = -15+rand()%26;
printf("Podaj roznice ciagu arytmetycznego = ");
scanf("%d",&r);
for(i=*rozmiar/2; i<=*rozmiar; i++)
{
a=a+r;
tab[i]=a;
}
}
int main()
{
int size;
char tablica[size];
printf("Podaj rozmiar tablicy = ");
scanf("%d",&size);
uzupelnij_tablice(tablica,&size);
printf("Wylosowana tablica :\n");
wyswietl_tablice(tablica,&size);
pierwsza_polowa_plus_5(tablica,&size);
sortuj_pierwsza_polowa(tablica,&size);
arytmatyczny_druga_polowa(tablica,&size);
printf("tablica po zmianach :\n");
wyswietl_tablice(tablica,&size);
return 0;
}
char
dla liczb, wariactwo? Po kiegosize
przekazujesz przez wskaźnik?int size; char tablica[size]; scanf("%d",&size);
- może jednak poświęć trochę czasu na przeczytanie podstaw, bo z przykładów się nie uczysz.