Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Dobrý den, chtěl jsem se zeptat jestli by tady nebyl někdo tak hodný, co by mi udělat spojový seznam , který by třídil shake sortem a nakonec seřazený výpis zobrazil, a uložil to souboru, třeba textového.
/* spojovy seznam */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> typedef struct { int den,mesic,rok; } TDatum; typedef struct PStudent { char jmeno[10],prijmeni[20]; TDatum datnar; int id; PStudent *dalsi; } TStudent; TStudent *prvni,*student; int PridejStudenta(char jmeno[10],char prijmeni[20], int dennar,int mesicnar,int roknar,int id) { student=(TStudent *) malloc(sizeof(TStudent)); if (student==NULL) { printf("Nepodarilo se pridat studenta\n"); return 0; } else { student->dalsi=prvni; prvni=student; strcpy(student->jmeno,jmeno); strcpy(student->prijmeni,prijmeni); student->datnar.den=dennar; student->datnar.mesic=mesicnar; student->datnar.rok=roknar; student->id=id; return 1; } } void VypisStudenty() { printf("\nVypis studentu\n************************\n"); for (student=prvni;student!=NULL;student=student->dalsi) { printf("%s %s\n",student->jmeno,student->prijmeni); } printf("***********************\n\n"); } void Uloz() { FILE *f; f=fopen("test.dat","wb"); for (student=prvni;student!=NULL;student=student->dalsi) { fwrite(student,sizeof(TStudent),1,f); } fclose(f); printf("Studenti ulozeni"); } void Nacti() { TStudent *st; FILE *f; f=fopen("test.dat","rb"); st=(TStudent *) malloc(sizeof(TStudent)); int p; while ((p=fread(st,sizeof(TStudent),1,f))==1) PridejStudenta(st->jmeno,st->prijmeni,st->datnar.den,st->datnar.mesic,st->datnar.rok,st->id); fclose(f); printf("Studenti nacteni"); } void Pridej() { char jmeno[10],prijmeni[20]; int den,mesic,rok,id; printf("Jmeno studenta:"); scanf("%s",jmeno); printf("Prijmeni studenta:"); scanf("%s",prijmeni); printf("Den narozeni:"); scanf("%d",&den); printf("Mesic narozeni:"); scanf("%d",&mesic); printf("Rok narozeni:"); scanf("%d",&rok); printf("ID:"); scanf("%d",&id); PridejStudenta(jmeno,prijmeni,den,mesic,rok,id); printf("Student pridan"); } int main(void) { prvni=NULL; char volba=0; int nacteno=0; do { printf("\n"); if (volba=='p') Pridej(); if (volba=='u') Uloz(); if (volba=='v') VypisStudenty(); if (volba=='n' && nacteno==0) { Nacti();nacteno=1;} //Soubor studentu lze z disku nacist jen jednou printf("\nHlavni nabidka\n"); printf("--------------\n"); printf("p..Pridat studenta\n"); printf("v..Vypis studenty\n"); printf("u..Ulozit ulozit studenty na disk\n"); if (nacteno==0) printf("n..Nahrat studenty z disku\n\n"); //Zobrazi se pouze, pokud nebyli studenti nacteni printf("k..Konec\n\nVase volba?"); } while ((volba=getch())!='k'); } /* Shake sort */ #include <stdio.h> #include<string.h> char *a[]={"Marie", "Lukas", "Katka", "Alena"}; int N=sizeof(a)/sizeof(a[0]); int i,j,k, zmena; void dopredu() { for(j=k;j< i-1;j++) { if (strcmp(a[j], a[j+1]) > 0) { char *pom=a[j]; a[j]=a[j+1]; a[j+1]=pom; zmena=1; } } } void zpatky() { for(k=j-1;k> N-i;k--) { if (strcmp(a[k], a[k-1]) < 0) { char *pom=a[k]; a[k]=a[k-1]; a[k-1]=pom; zmena=1; } } } void shakesort() { i=N; k=0; do { zmena=0; dopredu(); zpatky(); i--; }while(zmena!=0&&i!=0); } int main() { shakesort(); for(i=0;i<N;i++)printf("%s ",a[i]); getch(); return 0; }
Moc děkuji.
Lukáš
Offline
když to dáš do [ code][ /code] (bez těch mezer)
tak se tak to bude čitelnější a zachová a se ti formátování.
Offline
Stránky: 1