README, czyli krótka instrukcja obsługi

Zalecana jest kompilacja poniższych programów pod Linuxem, ponieważ są małe różnice w użytych funkcjach i np. Builder (stosowany pod Windows) może wywalać błędy.

Każdy z podanych programów zapisujemy w pliku nazwa.c (pamiętać o rozszerzeniu *.c). Następnie kompilujemy poprzez polecenie:

gcc -o nazwa nazwa.c //kompilacja

./nazwa //uruchomienie programu

Oczywiście może się zdarzyć, że któryś z programów musi zostać uruchomiony z parametrami. Zostanie to zaznaczone.

  1. Kalkulator 4-funkcyjny

//użytkownik podaje: liczbę1, operator: +, -, *, /, liczbę2, tzn. ./nazwa liczba1 operator liczba2

#include

#include

#include

char line[1000];

main()

{

char operator;

float value1, value2;

float result;

printf("Witaj w kalkutorze 4-funkcyjnym");

printf("Podaj pierwsza liczbe, operator dzialania i druga liczbe: ");

fgets(line, sizeof(line), stdin);

sscanf(line, "%f %c %f",&value1, &operator, &value2);

switch(operator)

{

case'+':

{

result=value1 + value2;

}

break;

case'-':

{

result=value1 - value2;

}

break;

case'*':

{

result=value1 * value2;

}

break;

case'/':

{

if(value2 == 0)

{

printf(" Pamietaj cholero, nie dziel przez zero");

printf(" Dzialanie nie zostalo wykonane.");

exit(1);

}

result=value1 / value2;

}

break;

default:

{

printf("Niewlasciwie wprowadzone dane.Try again:)");

exit(1);

}

}

printf("Wynik dzialania %c wynosi: %.3f", operator, result);

return(0);

}

  1. Program obliczający największą liczbę pierwszą mniejszą od zadanego n.

#include

int pierwsze(int n,int pier,int k, int tab[]);

int tab[1000];

int main()

{

int n;

int i;

int j=0;

int pier;

printf("Witaj w programie obliczajacym najwieksza liczbe pierwsza mniejsza od 'n'.Podaj n:");

scanf("%d",&n);

pier=sqrt(n);

pierwsze(n,pier,2,tab);

}

int pierwsze(int n,int pier,int k,int tab[])

{

int i;

int j=0;

if(k==pier)

{

for(i=0; i

printf("Tab[%d]=%d",i,tab[i]);

return(0);

}

else

{

for(i=k; i

{

if((i%2)==1) tab[j++]=i;

}

}

return(pierwsze(n,pier,k+1,tab));

}

  1. Program dokonujący operacji na macierzach.

#include

/*Wczytanie macierzy z pliku*/

int flag=0;

int wczytanie(double **macierz, FILE *plik, int *rozmiar)

{

int i, j;

for(i=0; i<(*rozmiar); i++)

{

for(j=0; j<(*rozmiar); j++)

{

fscanf(plik, "%lf",&macierz[i][j]);

}

}

fclose(plik);

flag=1;

}//koniec funkcji

/*Wyswietlenie macierzy*/

int wyswietlenie(double **mac, int *rozmiar)

{

int i, j;

if(flag!=1) printf(" UWAGA! Nie wczytales macierzy. Macierz jest pusta.");

else

{

printf("Rozmiar macierzy = %d", *rozmiar);

for(i=0; i<(*rozmiar); i++)

{

for(j=0; j<(*rozmiar); j++)

{

printf("%.1lf ",mac[i][j]);

}

printf("");

}

}//else

}//koniec funkcji

/*Mnozenie macierzy przez skalar*/

int mnozprzezskal(double **mac, int *rozmiar)

{

int i, j;

double skalar;

if(flag!=1) printf(" UWAGA! Nie mozesz mnozyc pustej macierzy. Wczytaj macierz");

else

{

printf("Podaj liczbe przez ktora chcesz pomnozyc macierz ");

scanf("%lf", &skalar);

for(i=0; i<(*rozmiar); i++)

{

for(j=0; j<(*rozmiar); j++)

{

mac[i][j]*=skalar;

printf("%.1lf ", mac[i][j]);

}

printf("");

}//koniec for

}//else

}//koniec funkcji

/*Dodawanie macierzy*/

int suma(double **mac, int *rozmiar )

{

int i, j;

int rozm;

double **mac2;

char nazwa_pliku[20];

FILE *stream;

double suma[*rozmiar][*rozmiar];

if(flag!=1) printf(" UWAGA! Nie mozesz sumowac pustej macierzy. Wczytaj macierz");

else

{

printf("Podaj plik z ktorego chcesz wczytac macierz: ");

scanf("%s", &nazwa_pliku);

stream=fopen(nazwa_pliku, "r");

if(stream==NULL) printf("Nie udalo sie wczytac pliku..");

fscanf(stream,"%d", &rozm);

mac2=(double**)malloc(rozm*sizeof(double));

for(i=0; i

mac2[i]=(double*)malloc(rozm*sizeof(double));

for(i=0; i

{

for(j=0; j

{

fscanf(stream, "%lf",&mac2[i][j]);

}

}

if((*rozmiar)==rozm) //rozm - rozmiar podanej macierzy ktora chcemy dodac

{

for(i=0; i<(*rozmiar); i++)

{

for(j=0; j<(*rozmiar); j++ )

{

suma[i][j]=mac[i][j]+mac2[i][j];

printf("%.1lf ",suma[i][j]);

}

printf("");

}

}//koniec if

else printf("Niewlasciwy rozmiar macierzy.Rozmiary macierzy musza byc sobie rowne.");

}//else

}//koniec funkcji

/*Mnozenie macierzy*/

int iloczyn(double **mac, int *rozmiar)

{

int i, j, k;

int rozm;

char nazwa_pliku[20];

double **mac2;

double iloczyn[*rozmiar][*rozmiar];

FILE *stream;

if(flag!=1) printf(" UWAGA! Nie mozesz mnozyc pustej macierzy. Wczytaj macierz");

else

{

printf("Podaj plik z ktorego chcesz wczytac macierz: ");

scanf("%s", &nazwa_pliku);

stream=fopen(nazwa_pliku, "r");

if(stream==NULL) printf("Nie udalo sie wczytac pliku..");

fscanf(stream,"%d", &rozm);

mac2=(double**)malloc(rozm*sizeof(double));

for(i=0; i

mac2[i]=(double*)malloc(rozm*sizeof(double));

for(i=0; i

{

for(j=0; j

{

fscanf(stream, "%lf",&mac2[i][j]);

}

}

if((*rozmiar)==rozm) //rozm - rozmiar podanej macierzy ktora chcemy dodac

{

for(i=0; i<(*rozmiar); i++)

for(j=0; j<(*rozmiar); j++ )

{

iloczyn[i][j]=0;

for(k=0; k<(*rozmiar); k++)

{

iloczyn[i][j]+=mac[i][k]*mac2[k][j];

}

printf("%.1lf ", iloczyn[i][j]);

}

printf("");

}

}//koniec if

else printf("Niewlasciwy rozmiar macierzy.Rozmiary macierzy musza byc sobie rowne.");

}//else

}//koniec funkcji

/*Slad macierzy czyli suma elementow na przekatnej*/

int slad(double **mac, int *rozmiar)

{

int i, j;

double slad;

if(flag!=1) printf(" UWAGA! Nie mozesz obliczyc sladu w pustej macierzy. Wczytaj macierz.");

else

{

for(i=0; i<(*rozmiar); i++)

{

for(j=0; j<(*rozmiar); j++)

{

if(i==j)

{

slad+=mac[i][j];

}

}

}//for

printf("Slad wczytanej macierzy wynosi = %.1lf", slad);

}//else

}//koniec funkcji

main(int argc, char *argv[])

{

FILE *plik;

double **macierz;

int rozmiar;

int i;

if(argc !=2)

{

printf("Niewlasciwa liczba argumentow.");

exit(1);

}

plik=fopen(argv[1],"r");

if(plik == NULL)

{

fprintf(stderr,"Error. Not exist such file.");

exit(1);

}

fscanf(plik, "%d", &rozmiar);

macierz=(double**)malloc((rozmiar)*sizeof(double));

for(i=0; i

macierz[i]=(double*)malloc(rozmiar*sizeof(double));

for(;;)

{

switch(menu())

{

case 1: wczytanie(macierz, plik, &rozmiar); break;

case 2: wyswietlenie(macierz, &rozmiar); break;

case 3: mnozprzezskal(macierz, &rozmiar); break;

case 4: suma(macierz, &rozmiar); break;

case 5: iloczyn(macierz, &rozmiar); break;

case 6: slad(macierz, &rozmiar); break;

case 7: exit(0);

}//koniec switch

}//koniec for

}//koniec main

int menu(void)

{

int c;

char s[2];

printf("");

printf("Program dokonujacy operacji na macierzach kwadratowych:");

printf("1. Wczytanie macierzy z pliku");

printf("2. Wyswietlenie macierzy");

printf("3. Pomnozenie macierzy przez skalar");

printf("4. Dodawanie dwoch macierzy./musza byc te same rozmiary/");

printf("5. Mnozenie macierzy./musza byc te same rozmiary/");

printf("6. Slad macierzy");

printf("7. Koniec ");

do

{

printf("Podaj swoj wybor: ");

scanf("%2s",&s);c=atoi(s);

}while (c<0 || c>7);

return c;

}

  1. Program sprawdzający czy wśród zapisanych w pliku nazwisk znajduje się dane nazwisko i ile razy.

//"plik z nazwiskami" i "szukane nazwisko" podajemy jako parametry wywołania programu

#include

int main(int argc, char *argv[])

{

FILE *dane;

char bufor[100];

int *znak; //znak odczytany z pliku

if(argc != 2)

{

printf("Nie podales argumentu. Prosze podac parametr: ");

exit(1);

}

dane=fopen(argv[1]; "r");

if(dane==NULL) //brak pliku

{

printf(".....plik %s nie istnieje ", bufor);

exit(1);

}

else

{

while((znak=fgetc(dane)) != EOF)

putc(znak, stdout);

fclose(dane);

}

printf("Nazwisko %s zostalo znalezione %d razy",argv[2],licznik);

return(0);

}

  1. Program zawierający funkcje:
    • Zwracającą ilość słów w pliku podanym jako parametr wywołania programu
    • Zwracającą ilość wystąpień szukanego słowa (które podajemy jako drugi parametr)

#include

int slowa(FILE *plik)

{

int i=0;

char buf[30];

while(!feof(plik))

{

fscanf(plik,"%s",buf);

i++;

}

return i;

}

int wystap(FILE *plik,char slowo[30])

{

int i=0;

char buf[30];

printf("%s",slowo);

fseek(plik,0,SEEK_SET);

while(!feof(plik))

{

fscanf(plik,"%s",buf);

printf("%s",buf);

if((strcmp(buf,slowo)==0))

i++;

}

return i;

}

main(int argc,char*argv[])

{

FILE *plik;

char buf[20];

int s,w;

plik=fopen(argv[1],"r");

if (argc!=3)

{

printf("zla liczba parametrow");

exit(1);

}

s=slowa(plik);

w=wystap(plik,argv[2]);

printf("Ilosc slow w podanym pliku: %d",s);

printf("Ilosc wystapien szukanego slowa: %d",w);

}

  1. Program, który dla zadanej liczby całkowitej n policzy liczbę całkowitą, której cyfry będą ustawione w odwrotnej kolejności (np. 546 => 645)

#include

#include

main()

{

int w,l,j,k,i=0,p=0;

printf("Podaj liczbe ");

scanf("%d",&k);

w=k;

while(k>=1)

{

k=k/10;

p++;

}

k=w;

while(k>=1)

{

j=k/10;

l=k%10;

p--;

i+=l*(pow(10,p));

k=j;

}

printf("%d",i);

}

  1. Program obliczający NWD.

//program działa pod Borlandem

#include

#include

void main()

{

int a=0,b=0,t=0,nwd1=0,nwd2=0,r=0;

int NWD=0;

char temp[10];

FILE *nwd;

printf("Podaj pierwsza i druga liczbe oddzielona (max 4-cyfrowa)");

fgets(temp,sizeof(temp),stdin);

sscanf(temp, "%d %d", &a, &b);

nwd1=a;

nwd2=b;

if(a

{

t=a;

a=b;

b=t;

}

r=1;

while(r)

{

t=a;

a=b;

b=t%b;

r=b;

}

printf("NWD(%d,%d)=%d",nwd1,nwd2,a);

nwd=fopen("nwd.txt","w");

fprintf(nwd,"Największy wspolny dzielnik liczb %d i %d wynosi NWD(%d,%d)=%d",nwd1,nwd2,nwd1,nwd2,a);

fclose(nwd);

getch();

}

  1. Program rysujący szachownicę.

//działa pod Borlandem

#include

#include

#include

void RysujSzachownice();

char line[100];

//zmienna potrzebna do fgets

void main()

{

while(1)

{

fflush(stdin);

//zerowanie bufora fgets

RysujSzachownice();

gotoxy(45,3);

printf("Szachownica :-)");

getch();

clrscr();

}

}//koniec main

//Funkcja rysujaca szachownice

void RysujSzachownice()

{

int i;

int j;

int k;

gotoxy(0,0);

printf(" ");

for(i=0;i<8;i++)

printf("%c%c%d%c%c",32,32,i+1,32,32);

printf("");

for(j=0; j<8; j++)

{

for(k=0; k<3; k++)

{

if (k==1) printf("%c",j+65);

else printf("%c",32);

for(i=0; i<8; i++)

{

if((i+j)%2==0) textcolor(15);

else textcolor(7);

cprintf("%c%c%c%c%c",219,219,219,219,219);

}

if (k==1) printf("%c",j+65);

else printf("%c",32);

printf("");

}

}

printf(" ");

for(i=0;i<8;i++)

printf("%c%c%d%c%c",32,32,i+1,32,32);

}//Koniec funkcji RysujSzachownice