Terzo vettore
PROBLEMA
Scrivere un programma che acquisito da tastiera due array monodimensionali le cui dimensioni sono fornite (oppure da 6 elementi) da tastiera restituisce in output un terzo array, che contempli l'accodamento del secondo al primo e nello specifico,
gli elementi dei primi due array che si trovano in posizione dispari dovranno ritrovarsi in posizioni pari. E quelli in posizioni pari dovranno ritrovarsi in posizioni dispari.
CODICE SORGENTE
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//dichiarazione funzioni
void caricamentoVettoreA();
void caricamentoVettoreB();
void concatenaVettori();
void invertiVettore();
void uscitaProgramma();
int dimensioneVettore_A();
int dimensioneVettore_B();
void visualizzaVettore_C();
void banner_time();
void traccia();
//funzione per visualizzare la traccia
void traccia (void) {
int i;
for (i=5;i>0;i--){
system("cls");
banner_time();
printf("Scrivere un programma in C che acquisito da tastiera due array monodimensionali le cui dimensioni sono");
printf("\nfornite (oppure da 6 elementi) da tastiera restituisce in output un terzo array, che contempli l'accodamento");
printf("\ndel secondo al primo e nello specifico, gli elementi dei primi due array che si trovano in posizione dispari");
printf("\ndovranno ritrovarsi in posizioni pari. E quelli in posizioni pari dovranno ritrovarsi in posizioni dispari.");
printf("\nSarai reinderizzato al programma tra %i", i);
sleep(1);
}
}
//funzione per richiedere la dimensione del vettore A con controllo
int dimensioneVettore_A () {
int i, x;
//do while per ripetere lo scanf se non è conforme alla condizione
do {
system("cls");
banner_time();
printf("Inserire il numero di elementi del vettore A: ");
scanf("%i", &x);
if (x<=0) {
//attesa di 5 secondi per poter reinserire l'input
for (i=5;i>0;i--){
system("cls");
printf("[!] Il valore immesso non e' valido potrai reinserire il valore tra %i secondi", i);
sleep(1);
}
system("cls");
printf("Inserire nuovamente il valore: ");
}
} while(x<=0); //deve essere maggiore di 0 per uscire dal ciclo
return (x); //richiamare il risultato con input();
}
//funzione per richiedere la dimensione del vettore B con controllo
int dimensioneVettore_B () {
int i, x;
//do while per ripetere lo scanf se non è conforme alla condizione
do {
system("cls");
banner_time();
printf("Inserire il numero di elementi del vettore B: ");
scanf("%i", &x);
if (x<=0) {
//attesa di 5 secondi per poter reinserire l'input
for (i=5;i>0;i--){
system("cls");
printf("[!] Il valore immesso non e' valido potrai reinserire il valore tra %i secondi", i);
sleep(1);
}
system("cls");
printf("Inserire nuovamente il valore: ");
}
} while(x<=0); //deve essere maggiore di 0 per uscire dal ciclo
return (x); //richiamare il risultato con input();
}
//funzione per il caricamento del primo vettore
void caricamentoVettoreA(int vettore_A[], int n_a) {
//sezione dichiarativa
int i;
//ciclo for per caricare il primo array
for (i=0;i<n_a;i++) {
printf("inserisci il %i valore del Vettore A: ", i+1);
scanf("%i", &vettore_A[i]);
}
}
//funzione per il caricamento del secondo vettore
void caricamentoVettoreB(int vettore_B[], int n_b) {
//sezione dichiarativa
int i;
//ciclo for per caricare il primo array
for (i=0;i<n_b;i++) {
printf("inserisci il %i valore del Vettore B: ", i+1);
scanf("%i", &vettore_B[i]);
}
}
//funzione per concatenare il primo al secondo vettore
void concatenaVettori(int vettore_A[], int vettore_B[], int vettore_C[], int n_a, int n_b){
//sezione dichiarativa
int j=0, i; //j=variabile d'appoggio per il conteggio; i=indice
//caricamento seconda parte del terzo vettore con il secondo vettore
for(i=0;i<n_a;i++){
vettore_C[j] = vettore_A[i];
j++;
}
//caricamento prima parte del terzo vettore con il primo vettore
for(i=0;i<n_b;i++){
vettore_C[j] = vettore_B[i];
j++;
}
}
//funzione per invertire pari e dispari
void invertiVettore (int vettore_C[], int n_a, int n_b) {
int i=0, f=0;
for (i=0;i<n_a+n_b;i++) {
if (i<n_a+n_b-1) {
f=vettore_C[i];
vettore_C[i]=vettore_C[i+1];
vettore_C[i+1]=f;
i++;
}
}
}
//funzione per visualizzare il terzo vettore
void visualizzaVettore_C (int vettore_C[], int n_a, int n_b){
//sezione dichiarativa
int i;
system("cls");
//richiamo funzione
banner_time();
printf("Vettore C attualmente");
printf("\n----------------------------------------------------\n");
printf("Elemento\tContenuto");
//for per mostrare a video posizione e contenuto
for (i=0;i<n_a+n_b;i++) {
printf("\n %i\t\t %i", i+1, vettore_C[i]);
}
printf("\n----------------------------------------------------\n");
}
//funzione ringraziamento
void uscitaProgramma (void) {
//sezione dichiarativa
int i;
printf("Premi un tasto per chiudere il programma...");
getch();
system("cls");
for (i=0;i<5;i++) {
printf("Grazie di aver utilizzato il programma\n");
sleep(1);
}
}
//funzione per visualizzare l'orario
void banner_time (void) {
//sezione dichiarativa
time_t t;
time(&t);
printf("----------------------------------------------------\n");
printf("%s", ctime(&t));
printf("----------------------------------------------------\n");
}
//funzione principale del programma
int main(int argc, char *argv[]) {
//sezione dichiarativa
int n_a, n_b; //n_a=numero di elementi del vettore A; n_b=numero di elementi del vettore B
traccia();
n_a=dimensioneVettore_A();
//dichiarazione vettore
int vettore_A[n_a];
//richiamo funzione
caricamentoVettoreA(vettore_A, n_a);
n_b=dimensioneVettore_B();
//dichiarazione vettore
int vettore_B[n_b];
//richiamo funzione
caricamentoVettoreB(vettore_B, n_b);
//dichiarazione vettore
int vettore_C[n_a+n_b];
//richiamo funzione
concatenaVettori(vettore_A, vettore_B, vettore_C, n_a, n_b);
visualizzaVettore_C(vettore_C, n_a, n_b);
printf("Premi un tasto per effettura il cambiamento. . .");
getch();
invertiVettore(vettore_C, n_a, n_b);
visualizzaVettore_C(vettore_C, n_a, n_b);
uscitaProgramma();
system("PAUSE");
return 0;
}