0% found this document useful (0 votes)
17 views

Cheatsheet

The document provides an overview of basic C programming concepts including data types, pointers, structures, and comparisons. It also covers loops, conditional statements, and functions. Matrix and vector operations from libraries like GSL and APOP are demonstrated. SQL queries and table operations are defined. Key data structures in APOP are described from the bottom up.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

Cheatsheet

The document provides an overview of basic C programming concepts including data types, pointers, structures, and comparisons. It also covers loops, conditional statements, and functions. Matrix and vector operations from libraries like GSL and APOP are demonstrated. SQL queries and table operations are defined. Key data structures in APOP are described from the bottom up.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

Modeling With Data: The Cheat while ( ondition){ do {

do_while_true; do_while_true;
Sheet } } while ( ondition);

Basic C for (pre-loop; ondition; at_ea h_loop){


do_while_true;
Types }
int Integer
double Real Number
For example, the standard means of operating on every element of an
har character
array declared with array[n℄:
Creating a structure:
typedef stru t{
har* name; for (int i=0; i<n; i++){
int number; operation(array[i℄);
} person; }
Declare & initialize:
int i = 8; Printf family format specifiers
int an_array[℄ = {2, 4, 6, 8}
har string[50℄ = "Hi there."; %i integer
int *array_ptr = mallo (sizeof(int)*20) %g general real number
%s string
The three laws of pointers %f float
(1) To declare a pointer to an integer, use int *k. %lf double (formerly long float)
(2) After its declaration, to refer to the int being pointed to, use *k. %Lf long double
(3) After its declaration, to refer to the pointer itself, use k. %- left-justify
For example, if p1 is an existing pointer, and p2 is being declared, set %n allow n spaces for the number
p2’s address equal to p1’s with int *p1 = p2, because p1 abides by %.n allow n spaces after the decimal
rule 1 and p2 abides by rule 3. %% plain old percent sign
\n begin a new line
Comparisons \t tab
(a > b) a is greater than b \" quotation mark
(a < b) a is less than b \(newline) continue string on the next line
(a >= b) a is greater than or equal to b
(a <= b) a is less than or equal to b Matrices and data
(a == b) a equals b Per-element operations
(a != b) a is not equal to b
(a && b) a and b gsl_matrix *a, *b;
(a || b) a or b gsl_ve tor *av, *bv;
(!a) not a double x;

A minimal program gsl_matrix_add (a,b);


#in lude <apop.h> gsl_matrix_sub (a,b);
int main(){ gsl_matrix_mul_elements (a,b);
printf("Hi.\n"); gsl_matrix_div_elements (a,b);
} gsl_ve tor_add (av,bv);
gsl_ve tor_sub (av,bv);
If you haven’t built a makefile yet, name this hello. and compile gsl_ve tor_mul (av,bv);
with gsl_ve tor_div (av,bv);
gsl_matrix_s ale (a,x);
g -g -Wall -std=gnu99 hello. gsl_matrix_add_ onstant (av,x);
gsl_ve tor_s ale (av,x);
Flow gsl_ve tor_add_ onstant (av,x);
Conditional evaluation: apop_ve tor_log(av);
apop_ve tor_exp(av);
if ( ondition){
do_if_true;
} else { Linear algebra
do_if_false; int *gsl_blas_ddot(gsl_ve tor *L, gsl_ve tor *R, double *out);
} apop_data *apop_dot(apop_data *L, apop_data *R, ...);
double apop_matrix_determinant(gsl_matrix *in);
Three types of loop: while, do-while, and for. gsl_matrix* apop_matrix_inverse(gsl_matrix *in);
apop_model
[Functions]
[Info] [Settings]
e s t i m a t e ( apop_data * d a t a , apop_model * model)
int vbase, mbase1, mbase2, dsize log_likelihood(data, model) cdf (data, model) void * m o r e
p(data, model) constraint(data, model)
char name[101] int prepared, status predict(data, model) print (data, model) int more_size
d r a w ( double * o u t , gsl_rng * r, model) prep(data, model)
a p o p _ d a t a * data apop_data *parameters *settings
s c o r e ( d a t a , gsl_vector *gradient, model)

apop_data apop_settings_type
gsl_vector * v e c t o r apop_data * more apop_data apop_data char* name
gsl_vector * w e i g h t s gsl_matrix *matrix ... ... void * a s s t
c h a r ***text int text_size[2] more more free(settings)
apop_name * names copy(settings)

apop_name
gsl_vector gsl_matrix
c h a r title[101]
double* d a t a double * d a t a
i n t colct, rowct, textct
i n t size int size1 int size2
char * vector
... ...
char ** column, **r o w , **t e x t

Figure 1: Key structures are built using other key structures. From the bottom up:
≻ The GSL provides simple vector and matrix structures.
≻ The apop_data struct has one of each, plus a text grid, weights vector, and metadata in an apop_name struct.
≻ Also, the more element points to an apop_data struct as well, allowing for a list of data sets (retrieved via, e.g.,
apop_data_get_page(basedata, "infopage")).
≻ The apop_model includes three types of item: information like data and parameters (which are apop_data structs)
functions that act on the model, and settings. See the online refs on using the settings.

SQL Table maintenance


The basic query format: create: reate table t(row1, row2, row3)
sele t olumns add data: insert into t values(1, 2, 3)
from tables add via query: insert into t sele t ...
where row_ onditions delete: drop table t
Specifying columns (select) Gnuplot
All cols: sele t * Basic 2D: plot 'datafile'
Only a few: sele t ol1, ol2 Basic 3D: splot 'datafile'
with table name: sele t t1. ol1, t2. ol2 Inline data:
with an alias: sele t ol1+ ol2 as sum
plot '-'
Specifying data sources (from) 1 2
3 4
just list tables: from table1, table2 5 6
or alias them: from table1 t1, table2 t2 e
or use a subquery:
from table1, (sele t a, b from a_tab) qtab Settings
Specifying rows (where) set term ...: set the output format, one of
posts ript, posts ript olor, png, gif, latex
The usual conditions: To return to screen display, use windows or X11.
where ol1+ ol2 > 3 and ( ol1=0 or ol2!=1) set out outfile: use in conjunction with set term.
join two tables via a common column: where t1.name = t2.name unset border: Delete the border of the plot.
Vertical query merging unset grid: Make the plot even more minimalist.
set size square: Set axes to have equal length on screen or paper.
Put on table on top of another, deleting dups: union set format y "%.3g": Use printf strings to format axis labels.
Put on table on top of another, do not delete dups: union all set format y "": Or just turn off printing on the Y axis entirely.
Find rows that appear in two queries: interse t
Find rows that appear only in first query: ex ept
All four of these must go between two queries (that return the same Comment Corner
number of columns), e.g.: C, one line //two slashes
SQL, one line --two dashes
sele t * from t1 Gnuplot & shell languages #number sign
union C & SQL, multiline /* star-slash
sele t * from t2 to slash-star*/

You might also like