Another C mathematical program
Disclaimer: For the non geeky programming lovers out there, sorry for spamming you with this bunch of incomprehensible lines of text!
The first time I wrote some kind of program was back in high school with a Ti80 calculator which had some sort of BASIC programming language. After reading the manual I spent hours making small mathematical programs to speedup my problem solving study. I must say the programs were not that useful to math because in the tests I had of course to show all the calculation I did… Then I forgot most things about programming… Until some years ago
.
Anyways, what does this have to do with the code below? Almost nothing! The code bellow calculates the mode of n numbers provided by a user. It dynamically creates an n size array and checks with value is seen more often. I still haven’t done a python version this time, if someone wan’ts to do it in python or any other language, please do!
Here it goes.
#include <stdio.h> #include <stdlib.h> /*Create a n sized array*/ int* makearray(int n) { int* v; int i; v = (int*) malloc(n*sizeof(int)); /*Alocates n int numbers*/ printf("Array elements:\n"); for (i = 0; i < n; i++){ /*Fill the array with user input*/ scanf("%d", &v[i]); } return v; } /*Get the size of an array*/ int arraylen(int v[]) { int i=0; while(v[i]) i++; return i; } /*Count how many times a given element is repeated in an array*/ int countelem(int v[], int num) { int i, n=0; for (i=0; i < arraylen(v); i++){ if (v[i] == (int) num){ n++; } } return n; } int main() { int n, i, count = 0, mode; int* v; printf("Size of the array?\n"); /*We don't wan't anyone creating a oversized array: DANGER'*/ /*So we limit it's' size. Here I randomly defined 100*/ do{ scanf("%d", &n); } while(n > 100); v = makearray(n); /*Update the wich value is repeated more ofted -> Mode*/ for (i = 0; i < n; i++){ if (countelem(v, v[i]) > count){ count = countelem(v, v[i]); /*Update the value of the maximum number of repeats*/ printf("%d\n", count); mode = v[i]; /*Update mode*/ } } printf("Mode: %d\n", mode); return 0; }
EDIT: There was a little bug with my code, it’s fixed now
.
One of my colegues made a python version
. Hope he doesn’t mind if I publish it
#!/bin/sh python #-*- coding: utf-8 -*- def makearray(v): """Creates the dictionary with the elements input by the user """ print "Array elements (end with empty line):" while(1): s = raw_input("-> ") # get an element if not s: break try: i = int(s) if v.has_key(i): # if already exists, increment frequency v[i] += 1 else: # if not, create it v[i] = 1 except: # error handling print "not an integer" #----------------------------------------------------------------------- # program # instead of a vector or array, we do this with a dictionary # that way we can keep the frequency count with each entry v = {} makearray(v) # get the mode if len(v): mode = 0 maxfreq = 0 for i in v.keys(): if v[i] > maxfreq: mode = i maxfreq = v[i] print "Mode %d, with frequency %d" % (mode, maxfreq) else: print "Empty array"
More From amrlima
If you want to follow this post leave a comment bellow and continue the thread, or sbscribe the feed. If you don't have a feed reader you may subscribe by e-mail. Click here to sign up.
Trackbacks & Pingbacks
[...] dias o meu colega António Lima publicou um artigo com um programa para calcular a moda de um array em C, no qual pedia uma implementação em Python. Fiz o programa em Python, usando um dicionário [...]
Comments
Deixe o seu comentário
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Subscribe by Email
Comentário by António Manuel Dias 17 de Janeiro de 2010 @ 22:29
I don’t mind at all — I would have published it myself if it was possible to post formatted code in comment. Anyway, I just noticed two minor errors in the comments of the program:
1. Where it reads “error and exit handling” should be just “error handling”;
2. Where it reads “with do this with a dictionary” should read “we do this with a dictionary”.
Comentário by amrlima 17 de Janeiro de 2010 @ 22:34
Fixed!