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.
- 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);
}
- 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)); } #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; } //"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); } #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); } #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); } //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 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(); } //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