Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




RubberDuck

#59430 Hasta donde tengo entendido (la jerga aún no la controlo), es un IDE propio de Harvard, que tiene módulos instalados para facilitar la ejecución de los ejercicios. Va sobre VS Code, el enlace que te dan es https://cs50.dev

Lo de clang lo introdujeron el otro día, en la clase 2 (esta que estoy haciendo), pero muy por encima, para que tengamos en cuenta que nos estamos ahorrando comandos gracias a que han simplificado el sistema para las clases.

1 respuesta
desu

#59431 Te recomiendo que uses esta pagina para ver las funciones disponibles en la librería: https://manual.cs50.io/#cs50.h

por ejemplo, en lugar de:

        if (sourcetext[i] == '.')

podrias usar estas funciones:

Si usas el curso de Hardvard no creo que tengas que tirar mucho del libro... xq el curso estará hecho basandose en el para empezar.

1 1 respuesta
RubberDuck

#59432 Sí, lo tengo en marcadores, junto con la guía de estilo, pero sí es cierto que no me he puesto a estudiarla detenidamente para ver qué funciones me pueden ahorrar código y tiempo.

Bueno, la última parte del código ha funcionado con mi clunky code, poco a poco iré estudiando más para ir optimizándolo. Gracias, desu, después de comer me leo tu código, que tengo la glucosa bajo mínimos ya...

2 respuestas
desu

#59433 me he instalado el cs50.h en local, si tienes cualquier duda en algun ejercicio dime y lo tiro.

1 1 respuesta
RubberDuck

#59434 Vale, pero no me gusta ocupar de más a la gente con cosas que tarde o temprano acabaré resolviendo (como la que puse). Además me interesa acostumbrar el cerebro a la frustración de toparme con un muro durante un buen tiempo, que no tengo costumbre ya... Ya si veo que es algo que me es imposible entender tras mirarlo desde todos los ángulos, lo pongo por aquí. Pero gracias, crack!

1 respuesta
r2d2rigo

#59433 tienes una carpeta de marcadores para big black cocks? Ay piraton.

1
desu

#59435 q equivocado estas fpero, si alguien te resuelve algo es para humillarte y recordarte tu sitio

#include <cs50.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>

typedef struct text_stats {
    int letters;
    int words;
    int sentences;
} text_stats;

text_stats text_stats_calc(size_t text_length, const string text);
void print_text_stats(const text_stats *stats);
float avg_letters(const text_stats *stats);
float avg_sentences(const text_stats *stats);
float CLindex(float avgletters, float avgsentences);
void test_text_stats_calc(void);

text_stats text_stats_calc(size_t text_length, const string text) {
    if (text_length == 0) {
        return (text_stats) {0, 0, 0};
    }

text_stats stats = {.letters = 0, .words = 1, .sentences = 0}; 

for (size_t i = 0; i < text_length; i++) {
    if (isalpha(text[i])) {
        stats.letters++;
    } else if (isspace(text[i])) {
        stats.words++;
    // TODO what if text is: `hello!!! how are you??` how many sentences
    } else if (text[i] == '.' || text[i] == '!' || text[i] == '?') {
        stats.sentences++;
    }
}

// Adjust word count if text ends with space
// TODO what if text is: `word     ` how many words do we need to subtract?
if (isspace(text[text_length - 1])) {
    stats.words--;
}

return stats;
}

void print_text_stats(const text_stats *stats) {
    printf("The text has %i letters, %i words, and %i sentences.\n", 
           stats->letters, stats->words, stats->sentences);
}

float avg_letters(const text_stats *stats) {
    return ((float) stats->letters / (float) stats->words) * 100;
}

float avg_sentences(const text_stats *stats) {
    return ((float) stats->sentences / (float) stats->words) * 100;
}

float CLindex(float avgletters, float avgsentences) {
    return (0.0588 * avgletters) - 0.296 * avgsentences - 15.8;
}

void test_text_stats_calc(void) {
    // Test 1: Empty string
    {
        const string text = "";
        text_stats stats = text_stats_calc(strlen(text), text);
        assert(stats.letters == 0);
        assert(stats.words == 0);
        assert(stats.sentences == 0);
    }

// Test 2: Simple sentence
{
    const string text = "Hello, world!";
    text_stats stats = text_stats_calc(strlen(text), text);
    assert(stats.letters == 10);
    assert(stats.words == 2);
    assert(stats.sentences == 1);
}

// Test 3: Multiple sentences
{
    const string text = "This is a test. It has three sentences. Right?";
    text_stats stats = text_stats_calc(strlen(text), text);
    assert(stats.letters == 35);
    assert(stats.words == 9);
    assert(stats.sentences == 3);
}

// Test 4: Text with multiple spaces
{
    const string text = "Extra   spaces   between   words.";
    text_stats stats = text_stats_calc(strlen(text), text);
    assert(stats.letters == 21);
    assert(stats.words == 4);
    assert(stats.sentences == 1);
}

printf("All tests passed!\n");
}

int main(void) {
    test_text_stats_calc();

const string text = "some text goes here. we want to count the words. and so on. and so forth.";
printf("%s\n", text);

const size_t text_length = strlen(text);
const text_stats stats = text_stats_calc(text_length, text);
print_text_stats(&stats);

const float avgletters = avg_letters(&stats);
printf("The text has an average of has %f letters per 100 words.\n", avgletters);

const float avgsentences = avg_sentences(&stats);
printf("The text has an average of has %f sentences per 100 words.\n", avgsentences);

const float clindex = CLindex(avgletters, avgsentences);
printf("The text has a Coleman-Liau index of %f.\n", clindex);
}

toma anda, hazme trims y normaliza las strings porque tu codigo de mierda no funciona, te he puesto un par de todos y unos tests q petan

1 3 respuestas
RubberDuck

#59437 Ya me siento como en casa, gracias!¡
Iba a decir "la mitad", pero es más lo que no entiendo. No llego ni a fpero :man_shrugging:

1 respuesta
desu

#59438 lleves 2 semanas o 20 años te humillo igual. esto se llama igualdad.

1
RubberDuck
#59428desu:

es igual que:

int letternum = lettercalc(text);
int wordnum = wordcalc(text);
printf("The text has an average of has %f letters per 100 words.\n", avgletters100(letternum, wordnum));

Leído y asimilado, danke.

Lo que estoy viendo con lo que explicas de declarar las variables para no meter dentro de los printf los calls a las funciones lo pensé, porque cada vez se veía más largo y feo, pero como estaba funcionando, lo dejé así de momento, por miedo tocar algo que hiciese que dejase de funcionar. Principalmente mi duda es dónde declarar esas variables, supongo que dentro de main, no?

#59437desu:

toma anda, hazme trims y normaliza las strings porque tu codigo de mierda no funciona, te he puesto un par de todos y unos tests q petan

Ahora me pondré a limpiar el código y a hacer las pruebas, pero todo eso que has hecho de los asserts y demás ni lo voy a tocar, porque no es para mi nivel de retraso y de momento solo me frenaría. Estoy intentando hacerlo todo según la metodología del curso, que es bastante básica y asequible (aunque yo haga que parezca que no).

1 respuesta
Kaledros
#59437desu:

si alguien te resuelve algo es para humillarte y recordarte tu sitio

Dramatización:

1 1 respuesta
RubberDuck

#59441 jajaja, lo bonito de entrar en un nuevo mundo. Memes desconocidos 😍

desu

#59440 declara e inicializa en la misma linea int a = 20;
vs

int a; 
a = 20;

usa const siempre const a = 20; y en los parámetros: float avg_sentences(const text_stats *stats) {

para indexar, while, for loops, el tamaño de un array, vector, string... usa siempre size_t en lugar de int.

cuando pases un array, vector, string a una función, siempre pasa la length: text_stats text_stats_calc(const size_t text_length, const string text);

inicializa las cosas en variables antes de llamarlo a funciones, si

quizás la unica excepcion son los predicados:

 if (isalpha(text[i])) {
            stats.letters++;
        }

vs

 // no se suele hacer esto si es un simple predicado 
 const is_alpha = isalpha(text[I])
 if (is_alpha) {
     stats.letters++;
 }

pero si tienes muchos si puede tener sentido xq se entiende mejor:

const is_true1 = predicate1();
const is_true2 = predicate2();
if (is_true1 && is_true2) ...

ya esta, solo con estos consejos ya programaras en C mejor que el 90% de los estudiantes.