Accedi

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;
}