Funzione Reverse

di il
2 risposte

Funzione Reverse

Buongiorno a tutti,

Sono un neofita nel campo della programmazione che da un paio di settimane a questa parte ha iniziato, nel tempo libero, a studiare da autodidatta un po' di programmazione e un po' di matematica.

Come libro per la programmazione ho deciso di prendere "The C Programming Language K&R".

Ho finora svolto quasi tutti gli esercizi, la domanda che volevo farvi è la seguente:

è normale che per alcuni esercizi ho impiegato addirittura 3-4 ore per pensare e poi scrivere una soluzione quantomeno decente? O sono totalmente negato?

Vi chiedo gentilmente se qualcuno può dare un giudizio o consigli in merito all'ultimo esercizio che ho appena finito di risolvere, grazie in anticipo!

#include <stdio.h>
#define SIZE 100

//Write a function reverse(s) that reverses the character strings. Use it to write a program that reverses its input a line at a time

int get_line(char input_storage[] , int size);
void reverse(char input_storage[] , int input_len);


int main(void) {

  char array[SIZE];
  int length = 0;

  while ((length = get_line(array , SIZE)) > 0) {
    reverse(array, length);
    printf("%s" , array);
    
  }


  return 0;
}

int get_line(char input_storage[] , int len) {
  int c;
  int counter = 0;

  while ((c = getchar()) != EOF && c != '\n') {
    if (counter < len - 2) {
    input_storage[counter] = c;
    counter++;
  }
}
  if (c == '\n') {
    input_storage[counter] = c;
    counter++;
  }
  input_storage[counter] = '\0';
  return counter;
}

void reverse(char input_storage[] , int input_len) {
  char temp;
  int i = 0;
  int j = 0;
  int print_nl = 0;
  if (input_storage[input_len - 1] == '\n') {
    j = input_len - 2;
  } else {
    j = input_len - 1;
    print_nl = 1;
}
  for (; j >= input_len / 2; i++ , j--) {
    temp = input_storage[i];
    input_storage[i] = input_storage[j];
    input_storage[j] = temp;
  }
if (print_nl == 1) {
  putchar('\n');
}
}

2 Risposte

  • Re: Funzione Reverse

    1) il linguaggio di programmazion C SEMBRA semplice, MA NON LO E'.
    Non tanto per la sintassi, che e' composto da un numero molto limitato di "parole chiave", MA per la gestione della memoria, che e' il VERO BAGNO DI SANGUE (e lacrime).

    2) visto che e' per "interesse personale", ti consiglio Python. Complessita' "simile" ma non ti devi "strappare le vesti"/"gettare dal balcone" perche' la gestione della memoria la fa lui.

    3) evita di passare i parametri da tastiera, almeno all'inizio. Questo ti semplifica notevolmente l'implementazione del codice perche' non devi diventare matto con la gestione della tastiera, dei tasti, degli "a capo", ecc.
    Inoltre ci sono modi infinitamente migliori per passare  i parametri ad un'applicazione che non leggere da tastiera (A MENO DI NON VOLER esplicitamente gestire la tastiera, ma NON E" QUESTO il caso)

    4) all'inizio SOLO 4 ore? Sei al limite del "genio" :-)
    Ovviamente all'inizio si possono inpiegare anche GIORNI / SETTIMANE / MESI per scrivere anche SOLO 4 righe di codice che funzionano.
    Il tempo impiegato NON E' importante. 

    ---

    se vuoi proprio passare dei parametri alla tua applicazione, allora MEGLIO passarli sulla riga di comando usando la console.
    L'unico inconveniente e' che sono TUTTE stringhe, quindi se vuoi passare dei numeri, devi fare le conversioni.
    Ma sono cose che puoi imparare in 20 minuti, una volta capito il meccanismo generale :-)

  • Re: Funzione Reverse

    Intanto ti ringrazio infinitamente per la gentilezza della tua risposta!

    Ho scelto C appositamente poiché vorrei in seguito studiare, anche solo un'infarinatura, sistemi operativi, architettura dei calcolatori ecc...

    Trovo che siano argomenti parecchio stimolanti.

    Magari farò un passo indietro più in avanti se dovessi iniziare a perdere interesse, non so, per ora prestare attenzione anche ai minimi dettagli mi sta dando parecchia soddisfazione, chiaramente son solo all'inizio lo so.

    Per quanto riguarda i parametri da tastiera intendi inserire gli input direttamente nel codice sorgente?

    Scusami se non ho capito, ma coi termini tecnici mi trovo ancora in difficoltà ??

    Grazie ancora.

Devi accedere o registrarti per scrivere nel forum
2 risposte