A teraz wrzucam programy (bez zad 6)(z poprawy z laborek- prawie identyczne jak z wykładu) zrobione tak jak chyżak chciał (bo mi już sprawdzał i poprawiałem)(pozmieniajcie chociaż coś przed pójściem ) ; Progsy przystosowane do uruchomienia
Za to że się narobiłem to chociaż mi browara od osoby ( kto to sobie druknie) postawcie.
Zad.1 Wczytać z klawiatury tablicę zadanej liczby struktur typu pojazd o polach producent,typ,moc_max, przyspieszenie_100, zuzycie_paliwa,ilosc, cena i dopisac do istniejacego pliku pojazdy.dat, następnie odczytać i wydrukować plik oraz obliczyć łączną wartość wszystkich pojazdów.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <condefs.h>
#define N 2
struct pojazd
{
char producent[20];
char typ[20];
int moc_max;
int przyspieszenie_100;
int zuzycie_paliwa;
int ilosc;
int cena;
};
struct pojazd pojazdy[N]; //pojazdy[N]-tablica do zapisu
struct pojazd poj_buf[N]; //poj_buf[N]-struktura do odczytu
main()
{
int i,laczna_wartosc;
for (i=0;i<N;i++)
{printf("\n\n Podaj producenta pojazdu %d =>... ",i);
scanf("%s",pojazdy[i].producent);
fflush(stdin);
printf("\n Podaj typ pojazdu %d =>... ",i);
scanf("%s",pojazdy[i].typ);
fflush(stdin);
printf("\n Podaj moc maksymalna pojazdu %d =>... ",i);
scanf("%d",&pojazdy[i].moc_max);
fflush(stdin);
printf("\n Podaj przyspieszenie na 100 pojazdu %d =>... ",i);
scanf("%d",&pojazdy[i].przyspieszenie_100);
fflush(stdin);
printf("\n Podaj zuzycie paliwa pojazdu %d =>... ",i);
scanf("%d",&pojazdy[i].zuzycie_paliwa);
fflush(stdin);
printf("\n Podaj ilosc pojazdow %d =>... ",i);
scanf("%d",&pojazdy[i].ilosc);
fflush(stdin);
printf("\n Podaj cene pojazdu %d =>... ",i);
scanf("%d",&pojazdy[i].cena);
fflush(stdin);
clrscr();
}
FILE*fp;
fp=fopen("pojazdy.dat","w+b"); //zgodnie z poleceniem powinno być r+b ale nie
// mamy danego pliku czyli trzeba go utworzyć
fwrite(&pojazdy,sizeof(pojazd),N,fp);
fclose(fp);
i=0;
fp=fopen("pojazdy.dat","r+b");
fseek(fp,0,SEEK_SET);
laczna_wartosc=0;
while(fread(&poj_buf[i],sizeof(pojazd),1,fp)) //pierwsza wersja//
{printf("\nProducent pojazdu %d =>%s",i,poj_buf[i].producent);
printf("\nTyp pojazdu %d =>%s",i,poj_buf[i].typ);
printf("\nMoc maksymalna pojazdu %d =>%d",i,poj_buf[i].moc_max);
printf("\nPrzyspieszeni na 100 pojazdu %d =>%d",i,poj_buf[i].przyspieszenie_100);
printf("\nZuzycie paliwa pojazdu %d =>%d",i,poj_buf[i].zuzycie_paliwa);
printf("\nIlosc pojazdow %d =>%d",i,poj_buf[i].ilosc);
printf("\nCena pojazdu %d =>%d",i,poj_buf[i].cena);
laczna_wartosc=laczna_wartosc+( (poj_buf[i].ilosc)*(poj_buf[i].cena));
i++;
printf("\n\n");
}
printf("\n\n Laczna wartosc wszystkich pojazdow =%d",laczna_wartosc);
getch();
return 0;
}
ZAD2.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <condefs.h>
main()
{ int buf,i,rozm_pliku,min,max,wart_uj,N,suma;
FILE*fp;
fp=fopen("liczby.dat","w+b"); //w poleceniu jest odczytac z pliku,
//ale najpierw trzeba go miec
if(fp)printf("\nPlik zostal utworzony\n");
else {printf("\nPlik nie zostal utworzony\n");getch();exit(1);}
fseek(fp,0,SEEK_SET);
printf("\nPodaj ile chcesz wpisac liczb calkowitych: ");
scanf("%d",&N);
for(i=0;i<N;i++)
{
printf("\npodaj liczbe calkowita:");
scanf("%d",&buf);
fwrite(&buf,sizeof(int),1,fp);
fflush(stdin);
}
fclose(fp);
printf("\nPodaj dolna granice przedzialu: ");
scanf("%d",&min);
printf("\nPodaj gorna granice przedzialu: ");
scanf("%d",&max);
fp=fopen("liczby.dat","r+b");
fseek(fp,0,SEEK_END);
rozm_pliku=ftell(fp)/sizeof(int);
fseek(fp,0,SEEK_SET);
suma=0;
wart_uj=0;
for(i=0;i<rozm_pliku;i++)
{
fread(&buf,sizeof(int),1,fp);
printf("\nElement %d=%d",i,buf);
if(buf>min&&buf<max)suma+=buf;
if(buf<0)wart_uj+=1;
}
printf("\n\nSuma liczb nalezacych do przedzialu [%d,%d] wynosi: %d",min,max,suma);
printf("\nIlosc wpisanych wartosci ujemnych wynosi: %d",wart_uj);
getch();
return 0;
}
Zad3. Napisać i zastosować w programie funkcję find znajdującą w tablicy znakowej ilość wystąpień dwóch zadanych znaków.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
int find(char *,int,char ,char ,int *);
main()
{
char tab[N];
char z1,z2;
int il_z1,il_z2;
printf("\npodaj lancuch: ");
scanf("%s",tab);
printf("podany lancuch wynosi: %s",tab);
fflush(stdin);
printf("\npodaj znak z1: ");
scanf("%c",&z1);
printf("podany znak wynosi: %c",z1);
fflush(stdin);
printf("\n\npodaj znak z2: ");
scanf("%c",&z2);
printf("podany znak wynosi: %c",z2);
fflush(stdin);
il_z1=find(tab,N,z1,z2,&il_z2);
printf("\n\nilosc zadanego elementu %c wynosi: %d",z1,il_z1);
printf("\nilosc zadanego elementu %c wynosi: %d",z2,il_z2);
getch();
return 0;
}
int find(char x[N],int n,char z1, char z2,int *p2)
{
int dl,i,il_z1,licz2;
dl=strlen(x);
printf("\ndlugosc lancucha wynosi %d",dl);
il_z1=0;
licz2=0;
for(i=0;i<dl;i++)
{
if(x[i]==z1)il_z1++;
if(x[i]==z2)licz2++;
}
*p2=licz2;
return il_z1;
}
Zad 4 Napisać i zastosować w programie funkcję obl_c obliczającą wyrażenia.
Autor: Bartłomiej Durajczyk
#include <stdio.h>
#include <conio.h>
#include <math.h>
# define N 3
int obl_c(int [],int [],int [],int ,int ,int* );
void wczyt_tab(int [],int );
void druk_tab(int [],int );
main()
{
int i, w[N],x,cmax,c;
int m[N],M[N];
wczyt_tab(w,N);
printf("\n");
wczyt_tab(m,N);
printf("\n");
wczyt_tab(M,N);
printf("\n");
printf("\nPodaj liczbe X: ");
scanf("%d",&x);
c=obl_c(w,m,M,N,x,&cmax);
printf("\nC wynosi: %d",c);
printf("\nCmax wynosi: %d",cmax);
getch();
return 0;
}
//tab1-w//tab2-m//tab3-M//
int obl_c(int w[N],int m[N],int M[N],int n,int x,int*pc)
{int i,f,c;
c=0;
*pc=0;
for(i=1;i<n;i++)
{ //zabezpieczenie na dzielenie przez zero//
if(m[i]==0)
{printf("\ndzielenie przez zero zabronione,\n");
printf("podaj inna liczbe rozna od zera dla tablicy m:");
scanf("%d",&m[i]);
}
f=x/m[i];
c+=(w[i])*(floor(f));
*pc+=(w[i])*(M[i]);
}
return c;
}
void wczyt_tab(int x[N],int n)
{
int i;
for(i=1;i<n;i++)
{printf("\n podaj element %d=",i);
scanf("%d",&x[i]);
}
}
void druk_tab(int x[N],int n)
{ int i;
for(i=1;i<n;i++)
printf(" \n element %d=%d",i,x[i]);
}
Zad. 5 Napisać funkcję read_2D wczytującą tablicę dwuwymiarową o 5 kolumnach oraz funkcję oblicz_WK. Obliczającą sumę elementów wybranego wiersza oraz sumę elementów wybranej kolumny. Wywołać te funkcje dla zadanych tablic tab1[10][5] i tab2[20][5].
#include <stdio.h>
#include <conio.h>
# define N 5
void read_2D(int [][N],int );
void druk_tab(int [][N],int );
int oblicz_WK(int [][N],int n ,int wr,int kol,int*pwr);
main()
{
int i, tab1[10][N],tab2[20][N],wr,kol,sum_kol,sum_wr;
printf("\n numeracja wiersza i kolumny zaczyna sie od zera");
printf("\nPodaj w jakim wierszu chcesz obliczyc sume elementow: ");
scanf("%d",&wr);
printf("\nPodaj w jakiej kolumnie chcesz obliczyc sume elementow: ");
scanf("%d",&kol);
read_2D(tab1,10);
printf("\n");
sum_kol=oblicz_WK(tab1,10,wr,kol,&sum_wr);
printf("\nSuma elementow wiersza %d wynosi: %d",wr,sum_wr);
printf("\nSuma elementow kolumny %d wynosi: %d",kol,sum_kol);
printf("\n");
printf("\n numeracja wiersza i kolumny zaczyna sie od zera");
printf("\nPodaj w jakim wierszu chcesz obliczyc sume elementow: ");
scanf("%d",&wr);
printf("\nPodaj w jakiej kolumnie chcesz obliczyc sume elementow: ");
scanf("%d",&kol);
read_2D(tab2,20);
printf("\n");
sum_kol=oblicz_WK(tab2,20,wr,kol,&sum_wr);
printf("\nSuma elementow wiersza %d wynosi: %d",wr,sum_wr);
printf("\nSuma elementow kolumny %d wynosi: %d",kol,sum_kol);
printf("\n");
getch();
return 0;
}
void read_2D(int x[][N],int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<N;j++)
{printf("\n podaj element [%d][%d]=",i,j);
scanf("%d",&x[i][j]);
}
}
void druk_tab(int x[][N],int n)
{ int i,j;
for(i=0;i<n;i++)
for(j=0;j<N;j++)
printf(" \n element [%d][%d]=%d",i,j,x[i][j]);
}
int oblicz_WK(int x[][N],int n,int wr,int kol, int *pwr)
{int i,j,sum_kol;
*pwr=0;
sum_kol=0;
for(j=0;j<N;j++)
*pwr+=x[wr][j];
for(i=0;i<n;i++)
sum_kol+=x[i][kol];
return sum_kol;
}