Porównanie liczb w C

0

Witam.
Mam problem z moim kodem, którego zadaniem jest pobranie od użytkownika dowolnej ilości liczb dużych całkowitych, następnie użytkownik podaje drugi zbiór liczb i względem tego drugiego zbioru(każdego elementu z tego zbioru) ma zostać wypisana ilość liczb mniejszych. Przy próbie wyszukania zgodnie z kluczem konsola zamiera
Oto kod

#include <stdio.h>
#include<stdlib.h>
int komp(long long *TAB, long long *TAb){
return (*(long long *)TAB - *(int *)TAb);
}
int *Wczytaj(int n)
{ 
int i;
int k = n;
int *buff = (int *)malloc(n * sizeof(int));
if(buff == NULL) {
printf("Nie działa!\n");
exit(0);
}
for( i=0; i<k; i++) 
{ printf("Tab[%d] = ", i);
scanf("%d", (buff + i));
}
return buff;
}
int binarne(int l, int *pierwszy, unsigned int ile)
{ 
int sr;
int prawo = ile;
int lewo = 0;
int i;
int wart;
while(lewo <= prawo)
{
sr = (lewo + prawo) / 2;
wart = pierwszy[sr];
if((wart == l) || (wart < l && pierwszy[sr + 1] > l) || (wart < l && pierwszy[sr-1] > l)){
printf("loo = %d a s = %d\n", pierwszy[sr - 1], sr);
if(pierwszy[sr-1] == l) {
printf("lowering; %d\n", sr);
while(pierwszy[sr-1] == l) sr--;
return sr;
} else
return sr+1;
}
if (wart<l)
lewo = sr-1;
else 
prawo = sr + 1;
}
}
int main(void)
{
int arg;
int kr;
int *ks;
int index;
int *Tab;
int *Tab1;
int i;
printf("Podaj elementy tablicy dynamicznej:\n");
scanf("%d",&arg);
Tab = Wczytaj(arg);
qsort(Tab,arg,sizeof(int),komp);
for(i = 0; i < arg; i++)
printf("%d ", *(Tab + i));
printf("Podaj kryterium:\n"); 
scanf("%d",&kr);
Tab1 = Wczytaj(kr);
for(i=0;i<kr;i++)
{ks = binarne(*(Tab1+i),Tab,arg-1);
printf("wynik = %d\n", ks);
}
free(Tab);
free(Tab1);
return 0;
}
0

najsampierw sformatuj kod jak należy bo tego czytać się nie da.

0

Ktoś może wie dlaczego po zadeklarowaniu np 3 elementów pętla się nie zamyka i pobiera w nieskończoność ?

#include <stdio.h>
#include<stdlib.h>

long long int komp(long long *TAB, long long *TAb){
return (*(long long *)TAB - *(int *)TAb);
}

long long int *Wczytaj(long long int n)
{ 
long long int i;
long long int k = n;
long long int *buff = (long long int *)malloc(n * sizeof(long long int));

if(buff == NULL) {
printf("Nie działa!\n");
exit(0);
}
for( i=0; i<k; i++) 
{ printf("Tab[%d] = ", i);
scanf("%d", (buff + i));
}
return buff;
}

long long int binarne(long long int l, long long int *pierwszy, unsigned long long int ile)
{ 
long long int sr;
long long int prawo = ile;
long long int lewo = 0;
long long int i;
long long int wart;

while(lewo <= prawo)
{
sr = (lewo + prawo) / 2;
wart = pierwszy[sr];
if((wart == l) || (wart < l && pierwszy[sr + 1] > l) || (wart < l && pierwszy[sr-1] > l)){
printf("");

if(pierwszy[sr-1] == l) {
printf("");

while(pierwszy[sr-1] == l) sr--;
return sr;
} else
return sr+1;
}

if (wart<l)
lewo = sr+1;
else 
prawo = sr;
}
}

int main(void)
{
long long int arg,kr,index,i;
long long int *ks;
long long int *Tab;
long long int *Tab1;
printf("Podaj elementy tablicy dynamicznej:\n");
scanf("%d",&arg);
Tab = Wczytaj(arg);

qsort(Tab,arg,sizeof(long long int),komp);

for(i = 0; i < arg; i++)
printf("%d ", *(Tab + i));
printf("Podaj kryterium:\n"); 
scanf("%d",&kr);
Tab1 = Wczytaj(kr);

for(i=0;i<kr;i++)
{
if(*(Tab1+i) < Tab[0]){
printf("Wynik = 0\n");
continue;
}
else if(*(Tab1+i) > Tab[arg-1]) {
printf("Wynik = %d\n", arg);
continue;
}

ks = binarne(*(Tab1+i),Tab,arg-1);
printf("wynik = %d\n", ks);
}

free(Tab);
free(Tab1);
return 0;
}
 
0

return (*TAB - *TAb);

1 użytkowników online, w tym zalogowanych: 0, gości: 1