#include #include /* Jan Dvořák dvoraj19@fel.cvut.cz vytvoreno 23.3.2009 */ int main(int argc, char * argv[]) { float *matice=NULL,*docasna=NULL; int ii=0,oo=0; int posun=0; float cislo=0.0,cislo2=0.0; char vstup[51]; /* místo na \0 */ char znak[2]={'\n','\0'}; int znakAsc=0; int pozice=0; /* kam zapisujeme v vstup[] */ int scf=0; /* výsledek funkce scanf */ int pocetRadku=0; int pocetPrvku=0; int pocetVRadku=0; int aktualneVRadku=0; matice=0; printf("Zadejte velikost posunuti:\n"); if(!scanf("%i",&posun)) goto chyba; if(posun<0) goto chyba; printf("Zadejte ctvercovou matici (radek matice = radek na vstupu):\n"); while(!feof(stdin)) { scf=scanf("%c",&znak[0]); znakAsc=(int)znak[0]; if(scf==-1 && znakAsc>32 && feof(stdin)==1) { znakAsc=13; } if(znakAsc==32 || znakAsc==13 || znakAsc==10 || znakAsc==9) { /* nečíselná hodnota */ if(pozice>0) { vstup[pozice++]='\0'; /* zakončíme vstup */ if(!sscanf(vstup,"%fd",&cislo) )goto chyba; /* vyhodnoceni */ aktualneVRadku++; if(znakAsc==10 || znakAsc==13) { /* jsme na konci radku */ if(pocetRadku==0) { pocetVRadku=pocetPrvku+1; aktualneVRadku=0; /* alokace celeho pole */ docasna=(float *) realloc(matice,pocetVRadku*pocetVRadku*sizeof(float)); if(!docasna)goto chyba; matice=docasna; /* */ }else{ /* kontrola jestli jou radky stejne dlouhe */ if(aktualneVRadku!=pocetVRadku) goto chyba; } aktualneVRadku=0; pocetRadku++; matice[pocetPrvku++]=cislo; }else{ /* jsme v radku */ pocetPrvku++; if(pocetRadku==0) { /* prvni radek, naalokujem */ docasna=(float *) realloc(matice,pocetPrvku*sizeof(float)); if(!docasna)goto chyba; matice=docasna; } matice[pocetPrvku-1]=cislo; } pozice=0; } }else{ vstup[pozice++]=znak[0]; } } /* zpracovani nactenych cise */ //printf("\n%d %d",pocetVRadku,pocetPrvku); if(pocetVRadku*pocetVRadku!=pocetPrvku) goto chyba; /* provedeme posuny*/ posun=posun % pocetPrvku; if(posun==0) goto preskoc; do { for(ii=0;ii1)posun--;else break; }while(1); preskoc: printf("Vysledna matice:\n"); for(ii=0;ii