Compare commits

...
2 Commits
Author SHA1 Message Date
Mariano Uvalle 0fe4bd42cf chore: double.c from chap1 2026-09-21 17:54:31 -07:00
Mariano Uvalle 2958364b07 chore: Arith placeholder. 2026-09-21 17:54:21 -07:00
5 changed files with 59 additions and 0 deletions
+20
View File
@@ -2,10 +2,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include <ctype.h> #include <ctype.h>
#include <string.h>
int linenum; int linenum;
int getword(FILE *, char *, int); int getword(FILE *, char *, int);
void doubleword(char *, FILE *);
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
int i; int i;
@@ -27,6 +29,7 @@ int main(int argc, char *argv[]) {
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
// getword reads a word from fp into buf, returning true if it was able to do so.
int getword(FILE *fp, char *buf, int size) { int getword(FILE *fp, char *buf, int size) {
int c; int c;
c = getc(fp); c = getc(fp);
@@ -50,3 +53,20 @@ int getword(FILE *fp, char *buf, int size) {
ungetc(c, fp); ungetc(c, fp);
return buf[0] != '\0'; return buf[0] != '\0';
} }
void doubleword(char *name, FILE *fp) {
char prev[128], word[128];
linenum = 1;
prev[0] = '\0';
while (getword(fp, word, sizeof word)) {
if (isalpha(word[0]) && strcmp(prev, word) == 0)
// word is a duplicate
{
if (name)
printf("%s:", name);
printf("%d: %s\n", linenum, word);
}
strcpy(prev, word);
}
}
+3
View File
@@ -0,0 +1,3 @@
hey there
it's been a very very long
time since
Executable
BIN
View File
Binary file not shown.
+6
View File
@@ -0,0 +1,6 @@
extern int Arith_max(int x, int y);
extern int Arith_min(int x, int y);
extern int Arith_div(int x, int y);
extern int Arith_mod(int x, int y);
extern int Arith_ceiling(int x, int y);
extern int Arith_floor (int x, int y);
+30
View File
@@ -0,0 +1,30 @@
#include "arith.h"
int Arith_max(int x, int y) {
return x > y ? x : y;
}
int Arith_min(int x, int y) {
return x > y ? y : x;
}
int Arith_div(int x, int y) {
if (/* division truncates toward 0 */ -13/5 == -2
&& /* x and y have different signs */ (x < 0) != (y < 0)
&& x%y != 0)
return x/y - 1;
else
return x/y;
}
int Arith_mod(int x, int y) {
return x - y*Arith_div(x, y);
}
int Arith_floor(int x, int y) {
return Arith_div(x, y);
}
int Arith_ceiling(int x, int y) {
return Arith_div(x, y) + (x%y != 0);
}