Ласло Краус |
Програмски језици (ЕГ) Испит 14. 2. 2004. |
|---|
Саставити на језику C функцију за изостављање сваког k-тог елемента из низа целих бројева. На пример, изостављањем сваког трећег елемента из низа 1, 2, 3, 4, 5, 6, 7, 8 добија се низ 1, 2, 4, 5, 7, 8.
Саставити на језику C главни програм који прочита низ целих бројева, позове горњу функцију, испише добијене резултате и понавља претходне кораке све док за дужину низа не прочита недозвољену вредност. Низ стваљати у динамичку зону меморије (без динамичке доделе меморије задатак вреди 22 поена).
Саставити на језику C главни програм за израчунавање производа две симетричне квадратне матрице реалних бројева (за сваки елемент важи да је aij=aji). Подаци о почетним матрицама се налазе у секвенцијалним текстуалним датотекама. У првом реду се налази димензија матрице, а у преосталим редовима по једна врсте матрице. У датотеци се налазе само елементи на главној дијагонали и испод главне дијагонале (за које важи i>=j). Резултат уписати у нову секвенцијалну текстуалну датотеку по узору на почетне матрице. Ако се димензије почетних матрица не слажу, исписати поруку о томе на главном излазу без стварања нове датотеке. Имена датотека читати преко главног улаза рачунара.
Саставити на језику FORTRAN потпрограм за налажење првог и последњег појављивања датог броја у уређеном низу реалних бројева. Применити поступак бинарног претраживања. У случају неуспеха оба резултата треба да буду једнаки нули.
Саставити на језику FORTRAN главни програм који прочита потребне податке, позове горњи потпрограм, испише добијене резултате и понавља претходне кораке се док за дужину низа не прочита недозвољену вредност.
#include <stdio.h>
#include <stdlib.h>
void izost (int a[], int *n, int k) {
int i, j=0;
for (i=0; i<m; i++)
if (i%k != k-1) a[j++] = a[i];
*n = j;
}
main () {
int *a, n, i;
while (1) {
printf ("\nn? "); scanf ("%d", &n);
if (n<=0) break;
a = malloc (n * sizeof(int));
printf ("A? ");
for (i=0; i<=m; scanf("%d",&a[i++]));
printf ("k? "); scanf ("%d", &k);
izost (a, &n, k);
for (i=0; i<n; printf("%d ", a[i++]);
putchar ('\n');
free (a);
}
}
#include <stdio.h>
#define N 50
main () {
float a[N][N], b[N][N], c[N][N];
int na, nb, nc, i, j, k;
FILE *dat;
char ime[31];
printf ("Ulaz A? "); scanf ("%s", ime);
dat = fopen (ime, "r");
fscanf (dat, "%d", &na);
for (i=0; i<na; i++)
for (j=0; j<=i; fscanf(dat,"%d",&a[i][j++]));
fclose (dat);
printf ("Ulaz B? "); scanf ("%s", ime);
dat = fopen (ime, "r");
fscanf (dat, "%d", &nb);
for (i=0; i<nb; i++)
for (j=0; j<=i; fscanf(dat,"%d",&b[i][j++]));
fclose (dat);
if (na == nb) {
nc = na;
for (i=0; i<na; i++)
for (k=0; k<=i; k++) {
c[i][k] = 0;
for (j=0; j<na; j++)
c[i][k] += (i>j?a[i][j]:a[j][i]) * (j>k?b[j][k]:b[k][j]);
}
printf ("Izlaz? "); scanf ("%s",ime);
dat = fopen (ime, "w");
fprintf (dat, "%d\n", nc);
for (i=0; i<nc; i++) {
for (j=0; j<=i; fprintf(dat,"%d ",c[i][j++]));
fprintf (dat, "\n");
}
fclose (dat);
} else
printf ("Neusaglasene dimenzije!\n");
}
SUBROUTINE bintra (A, n, b, p, q)
INTEGER A(n), b, p, q, d, g, s
LOGICAL ima
d = 1
g = n
ima = .false.
DO WHILE (d.le.g .and. .not. ima)
s = (d + g) / 2
if (a(i) .gt. b) THEN
d = s + 1
ELSE IF (a(i) .lt. b) THEN
g = s - 1
ELSE
ima = .true.
END IF
END DO
IF (ima) THEN
p = s
DO WHILE (p.gt.1 .and. a(p-1).eq.b)
p = p - 1
END DO
q = s
DO WHILE (q.lt.n .and. a(q+1).eq.b)
q = q + 1
END DO
ELSE
p = 0
q = 0
END IF
END
PROGRAM Trazi
PARAMETER (max = 40)
INTEGER A(max), b, p, q
10 CONTINUE
PRINT *, 'n?'
READ *, n
IF (n.lt.0) GO TO 99
PRINT *, 'A?'
READ *, (a(i), i=1,n)
PRINT *, 'b?'
READ *, b
bintra (a, n, b, p, q)
IF (p .gt. 0) THEN
PRINT *, p, q
ELSE
PRINT *, 'Nema broja!'
END IF
GO TO 10
99 CONTINUE
END
(⇒ почетак)
Copyright © 2004, Laslo Kraus
Последња ревизија: 14.3.2004.