You are on page 1of 5

Programiranje (120) 2020./2021.

Laboratorijska vježba 9

Zadatak 1
Napisati program za zbrajanje dvije matrice proizvoljnih dimenzija. Dimenzije matrica ko-
risnik određuje tijekom izvođenja programa. Zbrajanje matrica izvršiti u funkciji prototipa
int ** zbrmat(int **, int **, int, int); koja za argumente prima pokazivače na po-
kazivače preko kojih se pristupa matricama koje zbrajaju te broj redaka i stupaca. Funkcija
vraća adresu koja pokazuje na polje pokazivača koji pokazuju na vrijednosti rezultata zbraja-
nja. Unos podataka vršiti pozivom na funkciju prototipa void unmat(int **, int, int);,
koja za argumente prima pokazivač na pokazivač, te broj redaka i stupaca. Ispis rezultata
izvršiti u glavnoj funkciji. Zadatak riješiti primjenom aritmetike pokazivača.

Zadatak 2
Napisati program u kojem korisnik sa standardnog ulaza unosi proizvoljan broj riječi i jedan
znak. Program treba ispisati onu riječ u kojoj se uneseni znak pojavljuje najviše puta. Koris-
titi funkciju prototipa int brzn(char **, int, char); koja za argument prima pokazivač
na polje znakovnih nizova, broj znakovnih nizova u nizu, te slovo koje se ispituje. Funkcija
vraća indeks znakovnog niza s najviše pojavljivanja traženog znaka. Najveća dužina jednog
niza znakova neka je 80. Znakovni nizovi se unose sve dok se ne unese prazni redak. Unesene
znakovne nizove kopirati u polje znakovnih nizova koje treba zauzeti memorije točno koliko
ima znakova i pojedinom nizu.
Napomena: Za određivanje duljine znakovnog niza koristiti funkciju int strlen(char *);
koja za argument prima pokazivač na znakovni niz, te vraća broj znakova u nizu. Funkcija se
nalazi u biblioteci string.h.

Katedra za modeliranje i primjenu računala 1


Programiranje (120) 2020./2021.

Rješenja
Zadatak 1
#include<s t d i o . h>
#include<m a l l o c . h>

void unmat ( int ∗∗ , int , int ) ;


int ∗∗ zbrmat ( int ∗∗ , int ∗∗ , int , int ) ;
int main ( )
{
int rd , s t , i , j ;
int ∗∗a , ∗∗b , ∗∗ c ;

p r i n t f ( " K o l i k o ␣ redaka : ␣" ) ;


s c a n f ( "%d" , &rd ) ;
p r i n t f ( " K o l i k o ␣ s t u p a c a : ␣" ) ;
s c a n f ( "%d" , &s t ) ;

a = ( int ∗∗) m a l l o c ( rd ∗ s i z e o f ( int ∗ ) ) ;


b = ( int ∗∗) m a l l o c ( rd ∗ s i z e o f ( int ∗ ) ) ;

for ( i = 0 ; i < rd ; i ++) {


∗( a + i ) = ( int ∗) m a l l o c ( s t ∗ s i z e o f ( int ) ) ;
∗( b + i ) = ( int ∗) m a l l o c ( s t ∗ s i z e o f ( int ) ) ;
}

unmat ( a , rd , s t ) ;
unmat ( b , rd , s t ) ;

c = zbrmat ( a , b , rd , s t ) ;

for ( i = 0 ; i < rd ; i ++) {


for ( j = 0 ; j < s t ; j ++) {
p r i n t f ( "%4d" , ∗ ( ∗ ( a + i ) + j ));
}
p r i n t f ( "\ t " ) ;
for ( j = 0 ; j < s t ; j ++) {
p r i n t f ( "%4d" , ∗ ( ∗ ( b + i ) + j ));
}
p r i n t f ( "\ t " ) ;
for ( j = 0 ; j < s t ; j ++) {
p r i n t f ( "%4d" , ∗ ( ∗ ( c + i ) + j ));
}
p r i n t f ( "\n" ) ;
}
return 0 ;
}

Katedra za modeliranje i primjenu računala 2


Programiranje (120) 2020./2021.

int ∗∗ zbrmat ( int ∗∗a , int ∗∗b , int r , int s )


{
int ∗∗ c ;
int i , j ;

c = ( int ∗∗) m a l l o c ( r ∗ s i z e o f ( int ∗ ) ) ;

for ( i = 0 ; i < r ; i ++) {


∗( c + i ) = ( int ∗) m a l l o c ( s ∗ s i z e o f ( int ) ) ;
for ( j = 0 ; j < s ; j ++) {
∗(∗( c + i ) + j ) = ∗(∗( a + i ) + j ) + ∗(∗(b + i ) + j ) ;
}
}
return c ;
}
void unmat ( int ∗∗x , int r , int s )
{
int i , j ;

for ( i = 0 ; i <r ; i ++) {


for ( j = 0 ; j <s ; j ++) {
p r i n t f ( "(%d,%d ) : ␣" , i + 1 , j + 1 ) ;
s c a n f ( "%d" , ∗( x + i ) + j ) ;
}
}
return ;
}

Katedra za modeliranje i primjenu računala 3


Programiranje (120) 2020./2021.

Zadatak 2
#include<s t d i o . h>
#include<s t d l i b . h>
#include<s t r i n g . h>

int brzn ( char ∗∗ , int , char ) ;


int main ( )
{
char z , r e c [ 8 0 ] , ∗∗ r n i z = NULL;
int i , j , b r r = 0 , brs , r e d ;
do {
p r i n t f ( " U n e s i t e ␣ jednu ␣%d . ␣ r e c e n i c u \n" , b r r + 1 ) ;
f g e t s ( rec , sizeof ( rec ) , s t d i n ) ;
brs = s t r l e n ( rec ) − 1;

i f ( b r s == 0 )
break ;
b r r ++;

r n i z = ( char ∗∗) r e a l l o c ( r n i z , b r r ∗ s i z e o f ( char ∗ ) ) ;


i f ( r n i z == NULL)
return 1 ;

r n i z [ b r r − 1 ] = ( char ∗) m a l l o c ( ( b r s + 1 ) ∗ s i z e o f ( char ) ) ;
j = 0;
while ( r e c [ j ] != ’ \n ’ ) {
rniz [ brr − 1 ] [ j ] = rec [ j ] ;
j ++;
}
} while ( b r s != 0 ) ;

p r i n t f ( " U n e s i t e ␣ j e d n o ␣ s l o v o : ␣" ) ;
s c a n f ( "␣%c " , &z ) ;

r e d = brzn ( r n i z , brr , z ) ;
p r i n t f ( "U␣znakovnom␣ n i z u ␣(%s ) ␣ i n a ␣ n a j v i s e ␣ p o j a v l j i v a n j a ␣ t r a z e n o g ␣"
" znaka . \ n" , ∗( r n i z + r ed ) ) ;
return 0 ;
}
int brzn ( char ∗∗ n i z , int n , char c )
{
int i , j , br , bmax = 0 , imax ;

for ( i = 0 ; i < n ; i ++) {


br = 0 ;
j = 0;
while ( ∗ ( ∗ ( n i z + i ) + j ) != ’ \0 ’ ) {
i f ( ∗ ( ∗ ( n i z + i ) + j ) == c ) {

Katedra za modeliranje i primjenu računala 4


Programiranje (120) 2020./2021.

br++;
}
j ++;
}
i f (bmax < br ) {
bmax = br ;
imax = i ;
}
}
return imax ;
}

Katedra za modeliranje i primjenu računala 5

You might also like