Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 2016ws
  • 2017ws
  • 2018ws
  • 2019ws
  • 2020ws
  • 2021ws
  • 2022ws
  • 2023ws
  • 2024ws
9 results

Target

Select target project
  • pgerwinski/hp
  • bwildenhain/hp
  • Daniel.Eisi/hp
  • aahrens/hp
4 results
Select Git revision
  • 2016ws
  • 2017ws
  • 2018ws
  • master
4 results
Show changes

Commits on Source 476

376 additional commits have been omitted to prevent performance issues.
Showing
with 0 additions and 302 deletions
File deleted
Bevor die folgenden Programme installiert werden können, müssen Sie die
entsprechenden Entwicklungspakete der Bibliotheken installieren.
Unter Debian GNU/Linux jessie (der in 2016 aktuellen stabilen Version)
geht dies mit dem folgenden Befehl:
sudo apt-get install libc6-dev gcc libgtk-3-dev liballegro4-dev libsdl1.2-dev libsdl-ttf2.0-dev
Kompiliert werden können die Programme danach mit diesen Befehlen:
gcc -Wall -O hello.c -o hello
gcc -Wall -O hello-gtk.c -o hello-gtk $(pkg-config --cflags --libs gtk+-3.0)
gcc -Wall -O hello-allegro.c -lalleg -o hello-allegro
gcc -Wall -O hello-opengl.c -lGL -lGLU -lglut -o hello-opengl
gcc -Wall -O hello-sdl.c -lSDL -lSDL_ttf -o hello-sdl
#include <allegro.h>
#include <stdlib.h>
int main (void)
{
allegro_init ();
set_gfx_mode (GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0);
FONT *sans = load_font ("helv29.fnt", NULL, NULL);
int yellow = makecol (255, 255, 0);
textout_centre_ex (screen, sans, "Hello, world!", 160, 100, yellow, -1);
sleep (5);
allegro_exit ();
return 0;
}
#include <gtk/gtk.h>
int main (int argc, char **argv)
{
gtk_init (&argc, &argv);
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hello");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
GtkWidget *label = gtk_label_new ("Hello, world!");
gtk_container_add (GTK_CONTAINER (vbox), label);
GtkWidget *button = gtk_button_new_with_label ("Quit");
g_signal_connect (button, "clicked", G_CALLBACK (gtk_main_quit), NULL);
gtk_container_add (GTK_CONTAINER (vbox), button);
gtk_widget_show (button);
gtk_widget_show (label);
gtk_widget_show (vbox);
gtk_widget_show (window);
gtk_main ();
return 0;
}
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void draw (void)
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f (1.0, 1.0, 0.0);
glRasterPos2f (-0.65, -0.1);
char *hello = "Hello, world!";
while (*hello)
glutBitmapCharacter (GLUT_BITMAP_HELVETICA_18, *hello++);
glFlush ();
glutSwapBuffers ();
}
void timer_handler (int data)
{
exit (0);
}
int main (int argc, char **argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize (320, 200);
glutCreateWindow ("Hello");
glutDisplayFunc (draw);
glutTimerFunc (5000, timer_handler, 0);
glutMainLoop ();
return 0;
}
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
int main (void)
{
SDL_Init (SDL_INIT_VIDEO);
TTF_Init ();
SDL_Surface *display = SDL_SetVideoMode (320, 200, 8, SDL_HWSURFACE);
TTF_Font* sans = TTF_OpenFont ("FreeSans.ttf", 24);
SDL_Color yellow = { 255, 255, 0, 0 };
SDL_Surface* surface = TTF_RenderText_Solid (sans, "Hello, world!", yellow);
SDL_Rect dst_rect = { x: 90, y: 90, w: 200, h: 30 };
SDL_BlitSurface (surface, NULL, display, &dst_rect);
SDL_FreeSurface (surface);
TTF_CloseFont (sans);
SDL_UpdateRect (display, 0, 0, 0, 0);
SDL_Delay (5000);
SDL_Quit ();
return 0;
}
File deleted
Hallo.
Können mich alle "hören"?
Irgendwelche Sehgeschädigte im Raum?
Okay. Guten Tag und herzlich willkommen in der Übung zu
"Hardwarenahe Programmierung".
Diese Notizen werde ich zusammen mit dem anderen Material in unser GitLab hochladen.
Sie können sie dann unter
https://gitlab.cvh-server.de/pgerwinski/hp/20161003
herunterladen.
Ich wiederhole ... ach nee, das war falsch. Richtig ist:
https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20161003
Haben alle die URL?
Okay.
Sie dürfen übrigens auch sprechen. Nur ich sollte das nicht.
Auch sollte ich mich Ihnen nicht zu sehr persönlich nähern,
um Sie nicht meinen (Hardware-)Viren auszusetzen.
Okay. Wir sind also in einer Übung.
Heute geht es noch nicht darum, das Gelernte aus der Vorlesung zu vertiefen -
hauptsächlich deswegen, weil noch gar keine Vorlesung stattgefunden hat.
Stattdessen geht es mir um die Frage, welche Software-Bibliotheken auf IHREN
Rechnern am wenigsten Probleme verursachen.
Zu diesem Zweck habe ich verschiedene Hello-World-Programme geschrieben
und in das o.a. Verzeichnis auf unserem GitLab-Server hochgeladen.
Der Rest steht auf dem Übungsblatt, das ich Ihnen gleich zeige, und das Sie
ebenfalls von dort herunterladen können.
In diesem Sinne: Viel Spaß und viel Erfolg.
Bei Fragen bitte melden.
Ist jemand schon fertig?
Anscheinend nicht. Okay. Weiter ...
Zu Aufgabe 2 noch ein Hinweis: Laden Sie auch die beiden Zeichensatz-Dateien
FreeSans.ttf
helv29.fnt
herunter. hello-sdl.c benötigt FreeSans.ttf; hello-allegro benötigt helv29.fnt.
Wenn sich die Dateien zur Laufzeit nicht im aktuellen Verzeichnis befinden,
stürzen die Beispiel-Programme ab.
Diese Notizen sind jetzt übrigens auch im GitLab unter dem Dateinamen:
hp-20161007.txt
Hier nochmal die URL:
https://gitlab.cvh-server.de/pgerwinski/hp/tree/master/20161003
Die PDF-Datei mit den Übungsaufgaben heißt:
ainf-uebung-20161003.pdf
Noch ein Hinweis:
Auf den Hochschul-Rechnern, vor denen Sie sitzen,
ist klar¹, daß alles funktioniert. Das haben wir
im Vorfeld getestet.
Interessant ist, ob es auf IHREN mitgebrachten
Rechnern funktioniert, auf denen Sie auch zu Hause
üben - und auf denen Sie vielleicht hinterher die
Klausur schreiben wollen.
¹: Unter Linux. Unter Windows ist das nicht klar.
Aber wie auch immer: Es ist geplant, daß Sie zur
Klausur Ihre eigenen Rechner mitbringen dürfen,
also ist es sinnvoll, wenn dort auch alles funktioniert.
Hinweis: Um auf Ihren eigenen Rechnern eine C-Entwicklungsumgebung zu installieren,
empfehlen wir eine Web-Suche. Sie können z.B. für _alle_ Betriebssysteme gcc
herunterladen. Diese Software ist freie Software (Open Source) und kostenlos.
gcc für Windows: Cygwin oder MinGW
Dev.C++ scheint Ärger zu machen, zumindest unter Windows 10.
Funktioniert das bei irgendjemandem hier im Raum?
gcc für Mac: gibt es auch (Details vergessen)
gcc für GNU/Linux und *BSD: im Lieferumfang enthalten
Auch die Grafikbibliotheken (allegro, Gtk+, OpenGL inklusive GLUT) sollte es
für alle genannten Betriebssysteme geben; nur haben wir das nicht selbst getestet.
Wir wüßten aber gerne, wie gut oder wie schlecht diese Bibliotheken auf IHREN
Rechnern funktionieren. Daher diese Übung.
@ Herr Erpelding:
Noch eine Empfehlung: Bestellen Sie sich die vi-Referenz-Tasse.
(Wenn ich dran denke, bringe ich am Montag eine mit.)
@ alle:
Wenn Sie die hello-<Bibliothek>.c-Programme AUF IHREM RECHNER zum Laufen
gebracht haben, lassen Sie uns bitte wissen, wie.
Von diesen Ergebnissen hängt es nämlich ab, mit welcher Bibliothek oder
welchen Bibliotheken wir uns im Laufe des Semesters näher befassen werden.
<Nochmal im Klartext>
Sie können selbst dafür sorgen, daß wir uns im Laufe des Semesters mit einer
Bibliothek befassen, die AUF IHREM RECHNER auch tatsächlich funktioniert.
Wenn Sie das nicht tun, nehmen wir IRGENDEINE Bibliothek, und es ist allein
IHR PROBLEM, wie Sie die auf Ihrem Rechner zum Laufen bekommen.
</Nochmal im Klartext>
File deleted
main(){puts(1);}
File deleted
File deleted
File deleted
#include <stdio.h>
int main (void)
{
int a;
printf ("Bitte eine Zahl zum Dividieren eingeben: ");
scanf ("%d", &a);
if (a)
printf ("120 / %d = %d\n", a, 120 / a);
else
printf ("Nein, ich dividiere nicht durch 0.\n");
return 0;
}
#include <stdio.h>
int main (void)
{
int a;
printf ("Bitte eine Zahl zum Dividieren eingeben: ");
scanf ("%d", &a);
if (a)
printf ("120 / %d = %d Rest %d\n", a, 120 / a, 120 % a);
else
printf ("Nein, ich dividiere nicht durch 0.\n");
return 0;
}
#include <stdio.h>
int main (void)
{
int a;
printf ("Bitte eine Zahl zum Dividieren eingeben: ");
scanf ("%d", &a);
if (a)
printf ("120 / %d = %d Rest %d\n", a, 120 / a, 120 % a);
else
printf ("Nein, ich dividiere nicht durch 0.\n");
printf ("Das ist nicht erlaubt.\n");
return 0;
}
#include <stdio.h>
int main (void)
{
int a;
printf ("Bitte eine Zahl zum Dividieren eingeben: ");
scanf ("%d", &a);
if (a)
printf ("120 / %d = %d Rest %d\n", a, 120 / a, 120 % a);
else
{
printf ("Nein, ich dividiere nicht durch 0.\n");
printf ("Das ist nicht erlaubt.\n");
}
return 0;
}
#include <stdio.h>
int main (void) { int a; printf ("Bitte eine Zahl zum Dividieren eingeben: "); scanf ("%d", &a); if (a) printf ("120 / %d = %d Rest %d\n", a, 120 / a, 120 % a); else { printf ("Nein, ich dividiere nicht durch 0.\n"); printf ("Das ist nicht erlaubt.\n"); } return 0; }
#include <stdio.h>
int main (void)
{
int a;
printf ("Bitte eine Zahl zum Dividieren eingeben: ");
scanf ("%d", &a);
if (a == 1)
printf ("Division durch 1? Das ist mir zu einfach.\n");
else if (a)
printf ("120 / a = %d\n", 120 / a);
else
printf ("Nein, ich dividiere nicht durch 0.\n");
return 0;
}
#include <stdio.h>
int main (void)
{
int a;
printf ("Bitte eine Zahl zum Dividieren eingeben: ");
scanf ("%d", &a);
if (a == 1)
printf ("Division durch 1? Das ist mir zu einfach.\n");
else
if (a)
printf ("120 / a = %d\n", 120 / a);
else
printf ("Nein, ich dividiere nicht durch 0.\n");
return 0;
}