Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*LINKY*/
- //main.c
- #include <stdio.h>
- #include "linka.h"
- #include "cestujici.h"
- int main(int argc, char* argv[])
- {
- tZastavka *linka1 = NULL;
- tZastavka *linka2 = NULL;
- tZastavka *pomLinka = NULL;
- int volba,konec=1,pom;
- char nazev[20];
- FILE *f = NULL;
- tCestujici *cestujici = NULL;
- printf("\n");
- printf("\t |0| - Konec programu\n\n");
- printf("\t |1| - Nacti linky\n");
- printf("\t |2| - Vypis Zastavky\n");
- printf("\t |3| - Najdi Zastavku\n");
- printf("\t |4| - Vloz prestup\n");
- printf("\t |5| - Spocitej cestu\n");
- printf("\t |6| - Zrus linku\n\n");
- do{
- printf("\t Zadejte vasi volbu: ");
- scanf("%d",&volba);
- switch (volba){
- case 0:
- konec=0;
- break;
- case 1:
- f = fopen("linka1.txt","r");
- linka1 = NactiZastavkyDoLinky(f);
- fclose(f);
- f = fopen("linka2.txt","r");
- linka2 = NactiZastavkyDoLinky(f);
- fclose(f);
- printf("\n");
- printf("\t NACTENI PROBEHLO BEZ PROBLEMU\n\n");
- break;
- case 2:
- pom=0;
- printf("\n");
- printf("\t Jakou linku pozadujte vypsat? (1,2): ");
- scanf("%d",&pom);
- if(pom==1){
- if(linka1!=NULL){
- VypisZastavky(linka1);
- }else {
- printf("\n");
- printf("\t NELZE VYPSAT\n");
- }
- }else if(pom==2){
- if(linka2!=NULL){
- VypisZastavky(linka2);
- }else {
- printf("\n");
- printf("\t NELZE VYPSAT\n");
- }
- }else{
- printf("\n");
- printf("\t ZADALI JSTE SPATNE!!\n");
- }
- break;
- case 3:
- pom=0;
- printf("\n");
- printf("\t Na jake lince potrebujete najit zastavku ? (1,2): ");
- scanf("%d",&pom);
- printf("\t Jakou zastavku pozadujete najit na lince %d?: ",pom);
- scanf("%s",nazev);
- if(pom==1){
- pomLinka = NajdiZastavku(linka1,nazev);
- }else if(pom==2){
- pomLinka = NajdiZastavku(linka2,nazev);
- }else{
- printf("\n");
- printf("\t ZADALI JSTE SPATNE!!\n");
- }
- if(pomLinka!=NULL){
- printf("\n");
- printf("\t Nazev Zastavky: %s\n",pomLinka->nazevZastavky);
- printf("\t Dalsi Zastavka za: %.2f\n",pomLinka->casNaDalsiZastavku);
- if(pomLinka->prestupZastavku != NULL){
- printf("\t Prestupni Zastavka na zastavku %s \n",pomLinka->prestupZastavku->nazevZastavky);
- printf("\t Prestupni Zastavka s prestupem: %d\n",pomLinka->casNaPrest);
- }
- }else{
- printf("\n");
- printf("\t Dana zastavka nenalezena na lince %d ! \n",pom);
- }
- printf("\n");
- break;
- case 4:
- NactiPrestup(linka1,linka2);
- printf("\n");
- printf("\t NACTENI PRESTUPU PROBEHLO BEZ PROBLEMU\n\n");
- break;
- case 5:
- printf("\n");
- cestujici = vytvorCestujiciho();
- printf("\t Z jake zastavky pozadujte vyjet? ");
- scanf("%s",cestujici->zastavkaStart);
- printf("\t Do jake cilove zastavky pozadujte? ");
- scanf("%s",cestujici->zastavkaCil);
- cestujici->casCesty = spocitejCestu(cestujici,linka1,linka2);
- printf("\n");
- printf("\t Cestujiciho bude trvat cesta %.2f \n\n",cestujici->casCesty);
- break;
- case 6:
- pom=0;
- printf("\n");
- printf("\t Jakou linku pozadujte zrusit? (1,2):");
- scanf("%d",&pom);
- if(pom==1){
- zrusLinku(linka1);
- linka1 = NULL;
- printf("\t Byla zrusena linka 1\n!!");
- }else if(pom==2){
- zrusLinku(linka2);
- linka2 = NULL;
- printf("\t Byla zrusena linka 2\n!!");
- }else{
- printf("\t ZADALI JSTE SPATNE!!\n");
- }
- break;
- default:
- break;
- }
- }while(konec!=0);
- //system("pause");
- return 0;
- }
- ----------------------------------------------------------------------
- //linka.h
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "cestujici.h"
- typedef struct zastavka{
- char nazevZastavky[20];
- float casNaDalsiZastavku;
- float casNaPrest;
- struct zastavka *dalsiZastavku;
- struct zastavka *prestupZastavku;
- }tZastavka;
- tZastavka* NactiZastavkyDoLinky(FILE *f);
- tZastavka* Crate(float casNaDalsiZastavku,char *nazev);
- void zrusLinku(tZastavka *linka);
- tZastavka* NajdiZastavku(tZastavka *linka1,char *nazev);
- void NactiPrestup(tZastavka *linka1,tZastavka *linka2);
- void VlozPrestup(tZastavka *linka1,tZastavka *linka2,float cas);
- float spocitejCestu(tCestujici *cestujici,tZastavka *linka1,tZastavka *linka2);
- void VypisZastavky(tZastavka *linka);
- ------------------------------------------------------------------------------------
- //linka.c
- #include "linka.h"
- #include "cestujici.h"
- tZastavka* NactiZastavkyDoLinky(FILE *f){ // ze vstupního parametru souboru nacte požadované udaje do nové linky(chtìl to pùvodnì jinak, ale toto øešení mu nevadilo)
- tZastavka *prvni= NULL;
- tZastavka *pomocna= NULL;
- tZastavka *akt = NULL;
- char nazev[20];
- float casNaDalsiZastavku = 0;
- while(fscanf(f,"%s",nazev)!=-1){
- fscanf(f,"%f",&casNaDalsiZastavku);
- pomocna = Crate(casNaDalsiZastavku,nazev);
- if(prvni==NULL){//zøetezení do linárního seznamu
- prvni = pomocna;
- }else{
- akt->dalsiZastavku = pomocna;
- }
- akt = pomocna;
- }
- akt->dalsiZastavku = prvni; // zøetìžení dokola
- return prvni;
- }
- tZastavka* Crate(float casNaDalsiZastavku,char *nazev){// vytvoreni nove zastavky do linearniho seznamu
- tZastavka *novaLinka;
- novaLinka = (tZastavka*)malloc(sizeof(tZastavka));
- novaLinka->casNaDalsiZastavku= casNaDalsiZastavku;
- novaLinka->prestupZastavku = 0;
- novaLinka->prestupZastavku = NULL;
- novaLinka->dalsiZastavku = NULL;
- strcpy(novaLinka->nazevZastavky,nazev);
- return novaLinka;
- }
- void zrusLinku(tZastavka *linka){
- tZastavka *tmp = NULL;
- tZastavka *pomocPriMazani = NULL;
- tmp = linka;
- //zruseni zacyklení
- do{
- tmp=tmp->dalsiZastavku;
- }while(tmp->dalsiZastavku!=linka);
- tmp->dalsiZastavku=NULL;
- tmp = linka;
- do{
- if(tmp->prestupZastavku != NULL){
- pomocPriMazani= tmp->prestupZastavku;
- pomocPriMazani->casNaPrest = 0;
- pomocPriMazani->prestupZastavku = NULL;
- }
- pomocPriMazani = tmp->dalsiZastavku;
- tmp->dalsiZastavku=NULL;
- free(tmp);
- tmp = pomocPriMazani;
- }while(tmp != NULL);
- }
- tZastavka* NajdiZastavku(tZastavka *linka1,char *nazev){
- tZastavka *tmp= NULL;
- tmp = linka1;
- do{
- if(strcmp(tmp->nazevZastavky,nazev)==0){
- return tmp;
- }
- tmp = tmp->dalsiZastavku;
- }while(tmp != linka1);
- return NULL;
- }
- void NactiPrestup(tZastavka *linka1,tZastavka *linka2){
- FILE *f;
- char nazev1[20];
- char nazev2[20];
- tZastavka *prestupniZastavka1 = NULL;
- tZastavka *prestupniZastavka2 = NULL;
- float prestupCas = 0;
- f = fopen("prest.txt","r");
- while(fscanf(f,"%s",nazev1)!=-1){// kdyby bylo v souboru více prestupu
- fscanf(f,"%s",nazev2);
- fscanf(f,"%f",&prestupCas);
- prestupniZastavka1 = NajdiZastavku(linka1,nazev1);
- if(prestupniZastavka1==NULL){
- prestupniZastavka1 = NajdiZastavku(linka2,nazev1);
- }
- prestupniZastavka2 = NajdiZastavku(linka1,nazev2);
- if(prestupniZastavka2==NULL){
- prestupniZastavka2 = NajdiZastavku(linka2,nazev2);
- }
- if(prestupniZastavka1!= NULL && prestupniZastavka2!= NULL){
- VlozPrestup(prestupniZastavka1,prestupniZastavka2,prestupCas);
- } else{
- printf("Nelze vlozit prestup");
- }
- }
- fclose(f);
- }
- void VlozPrestup(tZastavka *linka1,tZastavka *linka2,float cas){
- linka1->casNaPrest = cas;
- linka2->casNaPrest = cas;
- linka1->prestupZastavku = linka2;
- linka2->prestupZastavku = linka1;
- }
- float spocitejCestu(tCestujici *cestujici,tZastavka *linka1,tZastavka *linka2){
- tZastavka *zacatek = NULL;
- tZastavka *konec = NULL;
- int zacinaNaLince=0,konciNaLince=0;
- float vyslednaCesta = 0;
- zacatek = NajdiZastavku(linka1,cestujici->zastavkaStart);
- if(zacatek==NULL){
- zacatek = NajdiZastavku(linka2,cestujici->zastavkaStart);
- zacinaNaLince = 2;
- }else{
- zacinaNaLince = 1;
- }
- konec = NajdiZastavku(linka1,cestujici->zastavkaCil);
- if(konec==NULL){
- konec = NajdiZastavku(linka2,cestujici->zastavkaCil);
- konciNaLince = 2;
- }else{
- konciNaLince = 1;
- }
- if(zacatek==NULL && konec==NULL){
- printf("\t Dane zastavky neexistuji\n");
- return 0;
- }
- do{
- if(zacinaNaLince==1){
- if(konciNaLince==1){
- vyslednaCesta += zacatek->casNaDalsiZastavku;
- zacatek = zacatek->dalsiZastavku;
- }else{
- if(zacatek->prestupZastavku!=NULL){
- vyslednaCesta += zacatek->casNaPrest;
- zacatek = zacatek->prestupZastavku;
- vyslednaCesta += zacatek->casNaDalsiZastavku;
- zacatek = zacatek->dalsiZastavku;
- }else{
- vyslednaCesta += zacatek->casNaDalsiZastavku;
- zacatek = zacatek->dalsiZastavku;
- }
- }
- }else {
- if(konciNaLince==2){
- vyslednaCesta += zacatek->casNaDalsiZastavku;
- zacatek = zacatek->dalsiZastavku;
- }else{
- if(zacatek->prestupZastavku!=NULL){
- vyslednaCesta += zacatek->casNaPrest;
- zacatek = zacatek->prestupZastavku;
- vyslednaCesta += zacatek->casNaDalsiZastavku;
- zacatek = zacatek->dalsiZastavku;
- }else{
- vyslednaCesta += zacatek->casNaDalsiZastavku;
- zacatek = zacatek->dalsiZastavku;
- }
- }
- }
- }while(zacatek!=konec);
- return vyslednaCesta;
- }
- void VypisZastavky(tZastavka *linka){
- tZastavka *tmp;
- tmp = linka;
- do{
- printf("\n");
- printf("\t Nazev Zastavky: %s\n",tmp->nazevZastavky);
- printf("\t Dalsi Zastavka za: %.2f\n",tmp->casNaDalsiZastavku);
- if(tmp->prestupZastavku != NULL){
- printf("\n");
- printf("\t Prestupni Zastavka na zastavku %s \n",tmp->prestupZastavku->nazevZastavky);
- printf("\t Prestupni Zastavka s prestupem: %.2f\n",tmp->casNaPrest);
- }
- tmp = tmp->dalsiZastavku;
- }while(tmp != linka);
- printf("\n");
- }
- ----------------------------------------------------------------------------------------
- //cestujici.h
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #pragma once
- typedef struct cestujici{
- char zastavkaStart[10];
- char zastavkaCil[10];
- float casCesty;
- }tCestujici;
- tCestujici* vytvorCestujiciho();
- ----------------------------------------------------------------------------------------
- //cestujici.c
- #include "cestujici.h"
- tCestujici* vytvorCestujiciho(){
- tCestujici *novyCestujici;
- novyCestujici = (tCestujici*)malloc(sizeof(tCestujici));
- novyCestujici->casCesty = 0;
- return novyCestujici;
- }
- -------------------------------------------------------
- -------------------------------------------------------
- -------------------------------------------------------
- /*ZPRAVY*/
- //main
- #include <stdio.h>
- #include "poleZprav.h"
- int main(int argc, char* argv[])
- {
- char text[60]; // pomocne pro tvorbu zprav
- int id; // -!!-
- int volnaPozice=0;
- int index=0;
- int volba=-1;
- AlokujPoleZprav(100);
- while(volba!=0) {
- printf("-------\n1.Pridat zpravu\n2.Odebrat zpravu\n3.Sort dle id\n4.Vypis zprav\n0.Konec\n-------");
- printf("\nZadejte Vasi volbu:\n");
- scanf("%d",&volba);
- switch(volba) {
- case 1:
- fflush(stdin);
- printf("\nZadej text zpravy:");
- fflush(stdin);
- gets(text);
- printf("\nZadej id zpravy:");
- fflush(stdin);
- scanf("%d",&id);
- pridejZpravu(id,text,&volnaPozice);
- break;
- case 2:
- printf("\nZadejte index zpravy, kterou chcete odebrat:");
- scanf("%d",&index);
- free(odeberZpravu(index,&volnaPozice));
- break;
- case 3:
- Setridit(volnaPozice);
- break;
- case 4:
- vypisZpravy(volnaPozice);
- break;
- default:
- if(volba!=0) {
- printf("\nSpatna volba");
- }
- break;
- }
- }
- }
- ------------------------------------------------
- //polezprav.h
- #ifndef struktura
- #include "zprava.h"
- #endif
- void AlokujPoleZprav(int kapacita);
- void PridejZpravu(int id, char text[60],int *volnaPozice);
- tZprava *odeberZpravu(int index);
- void vypisZpravy(int volnaPozice);
- void Setridit(int volnaPozice);
- ---------------------------------------------------
- //poleZprav.c
- #include "zprava.h"
- tZprava **poleZprav;
- void AlokujPoleZprav(int kapacita) {
- if((poleZprav=(tZprava**)calloc(kapacita,sizeof(tZprava*)))==NULL) {
- printf("problem pri praci s pameti\n");
- system("pause");
- return;
- }
- //printf("%d / %d = %d",sizeof(*poleZprav[99]),sizeof(tZprava),(sizeof(poleZprav)/sizeof(tZprava)));
- }
- void pridejZpravu(int id,char zprava[60],int *volnaPozice) {
- //printf("%d ",*volnaPozice);
- poleZprav[(*volnaPozice)] = vytvorZpravu(id,zprava);
- (*volnaPozice)++;
- }
- tZprava *odeberZpravu(int index,int *volnaPozice) {
- int k=0;
- for(k=index;k<(*volnaPozice)-1;k++) {
- poleZprav[k] = poleZprav[k+1];
- }
- (*volnaPozice)--;
- return poleZprav[(*volnaPozice)+1];
- }
- void vypisZpravy(int volnaPozice) {
- int k=0;
- printf("\n==========Vypis zprav==========\n");
- do{
- if(volnaPozice>0) { //pokud v poli nejaka zprava je
- printf("%d. - ",k);
- vypisZpravu(poleZprav[k]);
- }
- k++;
- }while(k<volnaPozice);
- /*for(k=0;k<volnaPozice;k++) {
- if(volnaPozice>0) {
- vypisZpravu(poleZprav[k]);
- }*/
- printf("\n==========Konec vypisu zprav==========\n");
- }
- void Prohod(int co,int scim) {
- tZprava *p;
- p = poleZprav[co];
- poleZprav[co] = poleZprav[scim];
- poleZprav[scim] = p;
- }
- //void Prohod(tZprava *zprava1,tZprava *zprava2) {
- // tZprava *p;
- // *p = *zprava1;
- // *zprava1 = *zprava2;
- // *zprava2 = *p;
- //}
- void Setridit(int volnaPozice) {
- int k=0;
- int l=0;
- int sorted=0;
- while(sorted!=1){
- sorted=1;
- for(l=0;l<volnaPozice-1;l++) {
- //do{ //rad bych, aby cykl prosel aspon 1x
- /*if(poleZprav[l]->id>poleZprav[l+1]->id && volnaPozice>0) {*/
- if(poleZprav[l]->id>poleZprav[l+1]->id && volnaPozice>0) {
- Prohod(l,l+1);
- sorted=0;
- }
- /*}while(l<=(volnaPozice-2));*/
- }
- }
- }
- -------------------------------------------------------------------------
- //Zprava.h
- #include <stdio.h>
- #include <stdlib.h>
- #ifndef struktura
- #define struktura
- typedef struct zprava {
- int id;
- char text[60];
- }tZprava;
- void vypisZpravu(tZprava *zprava);
- tZprava *vytvorZpravu(int id, char text[60]);
- #endif
- -------------------------------------------------------------------------
- //Zprava.c
- #include "zprava.h"
- void vypisZpravu(tZprava *zprava) {
- printf("%d. %s\n",zprava->id,zprava->text);
- }
- tZprava *vytvorZpravu(int id,char text[60]) {
- tZprava *p_pom_zpr;
- if((p_pom_zpr=(tZprava *)calloc(1,sizeof(tZprava)))==NULL) {
- printf("\nProblem pri praci s pameti\n");
- system("pause");
- return 0;
- }
- p_pom_zpr->id = id;
- strcpy(p_pom_zpr->text,text);
- return p_pom_zpr;
- }
- ------------------------------------------------------------------------------------------
- //Vektor
- vektor.c
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "vektor.h"
- //incializace
- extern VEKTOR *init() {
- VEKTOR *s;
- s = (VEKTOR*)malloc(sizeof(VEKTOR));
- s->pole = (PrvekPole*)calloc(5, sizeof(PrvekPole)); //init. vychozi pocet
- s->dimenze = 5;
- s->aktPocetPrvku = 0;
- //pointery na fce
- s->ukVypis = vypis;
- s->ukPridej = pridej;
- s->ukOdeber = odeber;
- s->ukSetrid = setrid;
- //navratova hodnota
- return s;
- }
- //pridani prvku
- void pridej(PrvekPole p){
- struktura->aktPocetPrvku++; //navyseni poctu prvku
- reallocPole(); //realokace pole, pokud je treba
- struktura->pole[struktura->aktPocetPrvku-1] = p; //pridani prvku
- }
- //realkovani pole
- void reallocPole() {
- if (struktura->aktPocetPrvku > struktura->dimenze) { //potreba zvetsit
- struktura->dimenze = struktura->dimenze * 2;
- struktura->pole = (PrvekPole*)realloc(struktura->pole, struktura->dimenze * sizeof(PrvekPole));
- }
- }
- //vypis hodnot
- void vypis(){
- int i;
- printf("Vypis prvku:\n\n");
- for(i=0; i< struktura->aktPocetPrvku;i++){
- printf("%d: ", i);
- printf(fznak, struktura->pole[i].hodnota);
- printf("; ");
- }
- printf("\n");
- }
- //debrani prvku na indexu
- void odeber(int i){
- int j;
- struktura->aktPocetPrvku--;
- for (j = i; j < struktura->aktPocetPrvku; j++){
- struktura->pole[j] = struktura->pole[j+1];
- }
- reallocPole();
- }
- //zamena prvku
- void prohod(int indexA, int indexB) {
- PrvekPole pom;
- #ifdef string
- strcpy(pom.hodnota, struktura->pole[indexA].hodnota);
- strcpy(struktura->pole[indexA].hodnota, struktura->pole[indexB].hodnota);
- strcpy(struktura->pole[indexB].hodnota, pom.hodnota);
- #else
- pom.hodnota = struktura->pole[indexA].hodnota;
- struktura->pole[indexA].hodnota = struktura->pole[indexB].hodnota;
- struktura->pole[indexB].hodnota = pom.hodnota;
- #endif
- }
- //setrideni pole
- void setrid(){
- int i, j, poc;
- for (i = 0; i < struktura->aktPocetPrvku; i++) {
- poc = i;
- for (j = i + 1; j < struktura->aktPocetPrvku; j++) {
- #ifdef string
- if (strcmp(strlwr(struktura->pole[poc].hodnota), strlwr(struktura->pole[j].hodnota)) == 1) {
- prohod(poc, j);
- }
- #else
- if (struktura->pole[poc].hodnota > struktura->pole[j].hodnota) {
- prohod(poc, j);
- }
- #endif
- }
- }
- }
Add Comment
Please, Sign In to add comment