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
void obl_c(int [],int [],int [],int );
void wczyt_tab(int [],int );
void druk_tab(int [],int );
main()
{
int i, w[N];
int m[N],M[N];
wczyt_tab(w,N);
printf("\n");
wczyt_tab(m,N);
printf("\n");
wczyt_tab(M,N);
printf("\n");
obl_c(w,m,M,N);
getch();
return 0;
}
void obl_c(int w[N],int m[N],int M[N],int n) //tab1-w//tab2-m//tab3-M//
{
int i,cmax,c,x,f;
printf("Podaj liczbe X:");
scanf("%d",&x);
c=0;
cmax=0;
for(i=1;i<n;i++)
{
P: switch(m[i]) //zabezpieczenie na dzielenie przez zero//
{case 0:
{printf("\ndzielenie przez zero zabronione,podaj inna liczbe dla tablicy m:");
scanf("%d",&m[i]);
goto P;
}
}
f=x/m[i];
c+=(w[i])*(floor(f));
cmax+=(w[i])*(M[i]);
}
printf("\nC wynosi: %d\n",c);
printf("Cmax wynosi: %d",cmax);
}
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 );
void oblicz_WK(int [][N],int );
main()
{
int i, tab1[10][N],tab2[20][N]; //wydruk z okna dla przykładu N=2//
read_2D(tab1,10);
printf("\n");
oblicz_WK(tab1,10);
printf("\n");
getch();
clrscr();
read_2D(tab2,20);
printf("\n");
oblicz_WK(tab2,20);
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]);
}
void oblicz_WK(int x[][N],int n)
{int i,j,sum_wr,sum_kol,wr,kol;
printf("\n numeracja wiersza i kolumny zaczyna sie od zera\n\n");
printf("\nPodaj w jakim wierszu chcesz obliczyc sume elementow: ");
scanf("%d",&wr);
printf("\nPodaj w jakiej kolumnie chcesz obliczyc sume elementow: ");
scanf("%d",&kol);
sum_wr=0;
sum_kol=0;
for(j=0;j<N;j++)
sum_wr+=x[wr][j];
for(i=0;i<n;i++)
sum_kol+=x[i][kol];
printf("\nSuma elementow wiersza %d wynosi: %d",wr,sum_wr);
printf("\nSuma elementow kolumny %d wynosi: %d",kol,sum_kol);
}
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. Dany jest plik liczby.dat. Obliczyć dla tego pliku sumę liczb należących do przedziału[min,max] oraz ilość wartości ujemnych.
#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. (Działa ale z błędem)
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
void find(char[N],int n);
main()
{
char tab[N];
printf("\npodaj lancuch: ");
scanf("%s",tab);
fflush(stdin);
printf("podany lancuch wynosi: %s",tab);
find(tab,N);
getch();
return 0;
}
void find(char x[N],int n)
{
int dl,i,il_z1,il_z2;
char z1[N];
char z2[N];
printf("\npodaj znak z1: ");
scanf("%s",z1);
printf("podany znak wynosi: %s",z1);
printf("\n\npodaj znak z2: ");
scanf("%s",z2);
printf("podany znak wynosi: %s",z2);
dl=strlen(x);
printf("\ndlugosc lancucha wynosi %d",dl);
il_z1=0;
il_z2=0;
for(i=0;i<dl;i++)
{
if(x[i]==z1[N])il_z1+=1;
if(x[i]==z2[N])il_z2+=1;
}
fflush(stdin);
printf("\n\nilosc zadanego elementu %s wynosi: %d",z1,il_z1);
fflush(stdin);
printf("\nilosc zadanego elementu %s wynosi: %d",z2,il_z2);
}
błędy występują przy drukowaniu łańcucha z1 i z2, czasem wynik z z1 jest drukowany pod z2 , czasem są przekłamania, a czasem z2 działa poprawnie