[JAVA] Réécrire les affectations de langage C de l'université avec Node.js

C est le premier langage informatique à apprendre dans votre département universitaire. Quand j'ai demandé à un étudiant que je connaissais, il semble qu'il y ait beaucoup de C ou de Java. Il y a peu d'échantillons, mais ... Comme moi, le premier langage de programmation est C. Les classes vont de la syntaxe de base aux structures de pointeurs. Personnellement, j'ai récemment commencé à prendre au sérieux le proramming, l'écriture de Javascript, en particulier Node.js. Je n'aborderai pas les avantages et les inconvénients de faire du langage C à l'université, mais ce serait significatif si quelqu'un qui a fait le langage C à l'école trouvait cet article et demandait: "Puis-je écrire ceci dans Node.js?" Je me demande si. J'espère que ce sera l'occasion d'écrire des applications WEB après cela. (Eh bien, je l'ai écrit presque capricieusement, alors j'ai juste essayé de l'écrire sous forme d'article ...)

Node.js

Vous pouvez obtenir autant de détails que vous le souhaitez par Google, mais officiellement c'est:

Node.js est un environnement JavaScript qui s'exécute sur le moteur JavaScript V8 de Chrome. Node.js utilise un modèle asynchrone piloté par les événements qui est léger et fonctionne efficacement. Node.js Package Management Manager npm est le plus grand écosystème de bibliothèques open source au monde.

Javascirpt est un langage qui s'exécute sur le navigateur, mais il peut également s'exécuter côté serveur en utilisant cette plate-forme. En outre, il possède des fonctionnalités telles que le traitement asynchrone, le type événementiel et le thread unique, et est parfois préféré du point de vue de la vitesse de traitement. Je pense que des articles de commentaires précis circulent, donc je ne vais pas expliquer en détail. Une autre chose à ajouter est qu'il existe de nombreuses bibliothèques disponibles dans le gestionnaire de packages appelé npm, et vous pouvez implémenter ce que vous voulez faire sans écrire trop de code. Pendant que je faisais du langage C, je me suis dit: "Si c'est une chose si difficile, ce serait formidable de développer une application ...". Cependant, s'il s'agit d'un langage couramment utilisé, la bibliothèque est vaste et vous pouvez facilement faire diverses choses. Étonnamment, je ne sais pas cela, et quand la programmation est difficile, j'ai tendance à être timide. De manière surprenante, c'est un fait que même si la ligne n'est pas bonne, cela ne peut se faire que par implémentation en raison d'un abus de copie et de bibliothèque. Bien sûr, je ne pense pas que cette méthode soit la meilleure pour apprendre. Que ce soit bon ou mauvais, faites quelque chose qui bouge et montez d'abord sur scène. Je pense que c'est une bonne réponse, mais je pense. (Eh bien ... je ne suis pas un grand fan, mais ... Ecrire un article est l'une des actions qui monte sur scène.) C'est tout pour l'introduction de Node.js. Si vous souhaitez vérifier le fonctionnement, veuillez installer node sur votre PC.

Sujet principal: réécrire le langage C

Je n'expliquerai pas en détail. Une solution est que si vous voulez obtenir le même résultat, vous pouvez le faire comme ceci.

Lire le fichier

Un programme qui lit le fichier jinkou.txt, ajoute des unités à la population (personnes) et à la superficie (km2) de chaque préfecture, et les affiche à l'écran.

jinkou.txt est un texte brut avec la zone de population de 47 préfectures séparées par des tabulations comme indiqué ci-dessous.

jinkou.txt


Préfecture d'Aichi 7254704 5164.06
Préfecture d'Ehime 1467815 5677.38
Préfecture d'Ibaraki 2975167 6095.69
Préfecture d'Okayama 1957264 7113
Préfecture d'Okinawa 1361594 2275.28
Préfecture d'Iwate 1385041 15278.77
Préfecture de Gifu 2107226 10621.17
.......
 

read-file.c


#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int main() {
	FILE *fp;
	char pref[256];
	int popu;
	float area;
	
  if((fp = fopen("jinkou.txt", "r")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  while (fscanf (fp , "%s", pref) != EOF) {
    fscanf(fp, "%d", &popu);
    fscanf(fp, "%f", &area);
    printf("%10s%10d personnes%10.2fKm2\n", pref, popu, area);
  }

  fclose(fp);
  return area;
}

résultat

Succès s'il est affiché sur la console comme ceci

Kobito.8mrvnq.png

Dans Node.js

C'est une implémentation qui lit Stream. Je pense qu'il existe de nombreuses autres façons.

read-file.js


'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.createReadStream('./jinkou.txt');
const rl = readline.createInterface({ 'input': rs, 'output': {} });

rl.on('line', (lineString) => {
  const columns = lineString.split(' ');
  const pref = columns[0];
  const popu = parseInt(columns[1]);
  const area = parseInt(columns[2]);
  console.log(pref + "\t" + popu + 'Homme' + "\t" + area + 'km2');
});

Cela donnera des résultats similaires.

Ecrire un fichier

Un programme qui affiche la densité de population de chaque préfecture dans le fichier mitsudo.txt avec le nom de la préfecture.

write-file.c


#include <stdio.h>
#include <stdlib.h> 

int main(void) {
	FILE *file1, *file2;
	char pref[256];
	int popu;
	float area, mitsudo;
	
  if ((file1 = fopen("jinkou.txt", "r")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  if ((file2 = fopen("mitsudo.txt", "w")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  while (fscanf (file1 , "%s", pref) != -1) {
    fscanf(file1, "%d", &popu);
    fscanf(file1, "%f", &area);
    mitsudo = (float)popu / area;
    fprintf(file2, "%8s %8.2f personnes/Km2\n", pref, mitsudo);
  }

  fclose(file1);
  fclose(file2);
}

résultat

Si misudo.txt comme celui-ci s'affiche, cela réussit (comme avec jinkou.txt, le nom du fichier n'a pas été donné par moi, donc ce n'est pas mal ...)

Kobito.TJ8Hog.png

Dans Node.js

write-file.js


'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.createReadStream('./jinkou.txt');
const rl = readline.createInterface({ 'input': rs, 'output': {} });
const map = new Map();

rl.on('line', (lineString) => {
  const columns = lineString.split(' ');
  const pref = columns[0];
  const popu = parseInt(columns[1]);
  const area = parseInt(columns[2]);
  const popu_density = (popu / area).toFixed(2) + 'Homme/km2';
  map.set(pref, popu_density);
});

rl.on('close', () => {
  let data = "";
  map.forEach((value, key) => {
    data += key + '\t' + value + '\n';
  }, map);
  fs.writeFile('./mitsudo.txt', data, ({ encoding: 'utf-8' }), (err) => {
    if (err) throw err;
    console.log('The file has benn saved!');
  });
});

Rechercher le contenu du fichier

Rechercher des données correspondant au nom de la préfecture saisi à partir du clavier Programme à afficher sur l'écran

search-file.c


#include <stdio.h>
#include <stdlib.h> 

int main(void) {
	FILE *file1;
	char pref[50][256], dmy[80], indata[80];
	float mitsudo[50];
	int n = 0, kosuu;
	
  if ((file1 = fopen("jinkou.txt", "r")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  while (fscanf (file1 , "%s", pref[n]) != -1) {
    fscanf(file1, "%f", &mitsudo[n]);
    fscanf(file1, "%s", &dmy);
    ++n;
  }
  kosuu = n - 1;

  fclose(file1);
  
  while(indata[0] != 'q') {
    printf("Nom des préfectures(Terminer par q)=");
    gets(indata);
    //Chercher
    for (n = 0; n <= kosuu; ++n) {
      if (strcmp(pref[n], indata) == 0) {
        printf("%8s %8.2f personnes/Km2\n", pref[n], mitsudo[n]);
      }
    }
  }
}

résultat

Kobito.hhviSj.png

Dans Node.js

'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.createReadStream('./mitsudo.txt');
const rl = readline.createInterface({ 'input': rs, 'output': {} });
const map = new Map();

rl.on('line', (lineString) => {
  const columns = lineString.split('\t');
  const pref = columns[0];
  const popu_density = columns[1];
  map.set(pref, popu_density);
});

rl.on('close', () => {
  console.log('Veuillez saisir le nom de la préfecture.(ctrl+Terminer par c)');
  process.stdin.resume();
  process.stdin.setEncoding('utf8');
  process.stdin.on('data', (data) => {
    let a = data.slice(0, data.length - 1);
    console.log(a + "\t" + map.get(a));
  });
});

Impressions et résumé

De manière inattendue, je ne pouvais pas l'écrire si facilement et rapidement ... En termes d'implémentation, les spécifications de process.stdin.on () ne sont pas bien comprises et \ n est inclus dans la valeur reçue, donc je suis tombé sur le fait qu'il ne peut pas être utilisé comme argument de map.get () tel quel. J'ai eu du mal. Aussi, j'ai écrit un article comme celui-ci pour la première fois autre que ce rapport, J'ai réalisé à nouveau que mon écriture était horriblement redondante et longue. Eh bien, je vais continuer à écrire quelque chose sans penser que c'est le nombre de sorties.

Matériel didactique recommandé pour Node.js

J'ai étudié à N Preparatory School. Je pense que le matériel pédagogique très facile à comprendre et poli est très merveilleux. Si vous ne comprenez pas la signification du code même après avoir lu les documents officiels, nous vous recommandons de suivre ce cours. Finalement, j'ai pu créer une application WEB en utilisant le framework, donc j'ai également apprécié le contenu. Je vous recommande de le redire.

Pour le moment

https://github.com/takewell/c2node

Recommended Posts

Réécrire les affectations de langage C de l'université avec Node.js
Langage Java du point de vue de Kotlin et C #
Traitement d'image: jouons avec l'image
Application Android: expliquons le mécanisme de transition d'écran avec un code simple
Exprimons le résultat de l'analyse du code d'octet Java dans un diagramme de classes
Vérifiez le contenu des paramètres avec le levier
Convertir le langage C en JavaScript avec Emscripten
À propos du traitement de BigDecimal (avec réflexion)
Mettre en forme le contenu de LocalDate avec DateTimeFormatter
Essayez les modèles de conception en langage C! Modèle de souvenir - mémorisons les souvenirs des données
AndroidStudio Faisons référence au C ++ dans le module des autres projets (Java / kotlin)
Briser de force le problème C "* 3 ou / 2" de [AtCoder Problem-ABC100] avec Java [Code]