Funzione Reverse

di il
1 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');
}
}

1 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 :-)

Devi accedere o registrarti per scrivere nel forum
1 risposte