codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RIGA 7
#define COLONNA 5
int count=0;
void sposta(char controlla[][COLONNA],int i,int j);
void combina(char numero[][COLONNA],char controlla[][COLONNA]);
void copia(char numero[][COLONNA],char controlla[][COLONNA],int partenza,int fine);
void abbina(char numero[][COLONNA], char controlla[][COLONNA]);
main(){
int riga=0, muovi=0, digita=0;
char tel[15], c[2]={' ','\0'};
char telefono[RIGA][COLONNA], controlla[RIGA][COLONNA];
char card[10][COLONNA]={" "," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
gets(tel);
while(muovi<RIGA){
c[0]=tel[muovi];
digita=atoi(c);
strcpy(&telefono[riga][0],&card[digita][0]);
strcpy(&controlla[riga][0],&card[digita][0]);
++riga;
++muovi;
}
combina(telefono,controlla);
printf("\nCombinazioni N.%d\n",count);
}
void sposta(char controlla[][COLONNA],int i,int j){
char copia;
int x=0;
int totale=0;
int colonna;
totale=strlen(&controlla[i][0]);
colonna=totale;
while(totale>0 && x<colonna-1){
copia=controlla[i][x];
controlla[i][x]=controlla[i][x+1];
controlla[i][x+1]=copia;
++x;
--totale;
}
controlla[i][x]='0';
controlla[i][x+1]='\0';
}
void combina(char numero[][COLONNA],char controlla[][COLONNA]){
int i,j;
int conta=0;
while(conta<RIGA){
printf("%c",controlla[conta][0]);
++conta;
}
++count;
printf("\n");
abbina(numero,controlla);
}
void copia(char numero[][COLONNA],char controlla[][COLONNA],int partenza,int fine){
int i,j;
for(i=partenza;i<RIGA;i++){
for(j=0;j<COLONNA;j++){
memcpy(&controlla[i][j],&numero[i][j],4);
}
}
}
void abbina(char numero[][COLONNA], char controlla[][COLONNA]){
int muovi=0,stop=0;
for(muovi=0;muovi<RIGA;muovi++){
if(controlla[(RIGA-1)-muovi][1]!='0' && controlla[(RIGA-1)-muovi][1]!='\0' ){
sposta(controlla,(RIGA-1)-muovi,0);
copia(numero,controlla,(RIGA-1)-muovi+1,0);
stop=1;
muovi=RIGA+1;
}
}
if(stop==1)
combina(numero,controlla);
}