Linux'da Programlama

Başlatan engin_, 18 Nisan 2006, 21:25:20

engin_

Lİnux'da yazdığınız programı derlemenin en basit yolu programınızın bulunduğu yerde konsoldan
(Eğer bir C programı ise)
gcc program.c -o derlendikten_sonraki_ismi

komutunu vermektir. Açıkçası Win de hiç C veya C++ dosyası derlemedim. Ama bu kadar kolay olmayacağına eminim. Gerçi GCC win'de de var ama denemeye fırsatım olmadı.

Neyse aşağıda önceden kodladığım basit bir program var. Tek yaptığı şey kelimelerdeki harfleri karıştırmak.

Derlemek için;
gcc karistir.c -o Karıştır
Çalıştırmak için bulunduğunuz dizinde;
./Karıştır
yazmanız yeterli.
//karistir.c
#include <stdio.h>
#include <string.h>

char a[]="Evet programda biraz oynadıktan sonra bu haliyle daha iyi bir sonuç elde etmek mümkün \
burada aslında sesli ve sessiz harfleri yanyana fazla getirmemek lazım sanırım ";
char b[20];


sil (){
	int i;
	for(i=0;i<strlen(b);i++){
		b[i]=' ';
	}
}

karistir(int i){

 	if (i<4){
		yaz();
 		return;
	}else{
		degis(i);
		return;
	}
}

degis(int son){
	int bas,i;
	char harf1,harf2;
	bas=1;
	son--;
	for(i=0;i<=son-3;i=i+3){
		harf1=b[bas+i];
		harf2=b[bas+i+1];
		b[bas+i]=harf2;
		b[bas+i+1]=harf1;
	}
	yaz();
}

yaz(){
	int i;
	for(i=0;i<strlen(b);i++){
		if(b[i]==' ') continue;
		printf("%c",b[i]);
	}
	printf(" ");
}

main(){

	int i=0,x=0,y=0;
	x=strlen(a);

	while(i<x){

		if(a[i]==' '){
			karistir(y);
			sil();
 			y=0;
			i=i+1;
 			continue;
		}else{
			b[y]=a[i];
			y++;
			i=i+1;
		}
	}
}


Programın Gui ile yazılmış hali (GTK kütüphaneleri kullanılarak):

#include <gtk/gtk.h>
#include <stdio.h>
#include <string.h>

#define utf8(x)  g_locale_to_utf8 (x,-1,0,0,0)
#define locale(x)  g_convert (x,-1,charset,"UTF-8",0,0,0)

	GtkWidget *window;							// Gtk nesnesi oluşturuluyor
	GtkWidget *fixed;
	GtkWidget *table;
	GtkWidget *karistir;	
	GtkWidget *text;
	GtkWidget *scroll;
	GtkWidget *vscrollbar;
	GtkObject *adj1;
	GtkWidget *view;
	GtkTextBuffer *buffer;

	GtkTextIter start, end;
	PangoFontDescription *font_desc;
	GdkColor color;
	GtkTextTag *tag;
	
	gchar *text_;
	const char *charset;
	
	gchar *p,*ssss;
	gchar b[30],a[100];
	
sil (){
	gint i;
	for(i=0;i<strlen(b);i++){
		b[i]=' ';
	}
}

uyarla(gint i){

	if (i<4){
		yaz();
		return;
	}else{
		degis(i);
		return;
	}
}

degis(gint son){
	gint bas,i;
	gchar harf1,harf2;
	bas=1;
	son--;
	for(i=0;i<=son-3;i=i+3){
		harf1=b[bas+i];
		harf2=b[bas+i+1];
		b[bas+i]=harf2;
		b[bas+i+1]=harf1;
	}
	yaz();
}

yaz(){
	gint i;
	gchar dd[1];
	ssss=a;
	for(i=0;i<strlen(b);i++){
		if(b[i]==' ') continue;
		dd[0]=b[i];
		//g_printf("%c",b[i]);
		strncat(ssss,dd,1);
	}
	g_printf(" ");
	strcat(ssss," ");
}

devir(){
	gint i=0,x=0,y=0;
	x=strlen(p);

	while(i<x){

		if(p[i]==' '){
			uyarla(y);
			sil();
			y=0;
			i=i+1;
			continue;
		}else{
			b[y]=p[i];
			y++;
			i=i+1;
		}
	}
	g_printf("\n");
}


void kapat( GtkWidget *widget, gpointer data )
{
	gtk_main_quit();
}

karistir_clicked(){

	gtk_text_buffer_get_start_iter(buffer,&start);
	gtk_text_buffer_get_end_iter(buffer,&end);
	
	text_=g_strdup(gtk_text_buffer_get_text(buffer,&start,&end,0));
	
	p=locale(text_);
	
	devir();
	g_printf("%s \n",ssss);
	gtk_text_buffer_set_text (buffer, utf8(ssss), -1);
		
	//  0 ile 5 arasındaki karaketerleri kırmızı renkte göstermek için
	//gtk_text_buffer_get_iter_at_offset (buffer, &start, 0);
	//gtk_text_buffer_get_iter_at_offset (buffer, &end, 5);
	
	// karekterlerin tümü için
	gtk_text_buffer_get_start_iter(buffer,&start);
	gtk_text_buffer_get_end_iter(buffer,&end);
	gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
	
}


int main( int   argc,
          char *argv[] )
{

	gtk_init (&argc, &argv);						// Gtk başlatılıyor
	
	g_get_charset(&charset);
	g_print ("%s\n", charset);
	
	// Form oluşturulur
	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);                  	// Yeni bir form oluşturulur
	gtk_window_set_title(GTK_WINDOW(window),utf8("Karıştır"));            	// Formun başlığı verilir
	gtk_window_set_default_size(GTK_WINDOW(window),315,180);       		// Boyutları belirlenir
	gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); 	// Konumu belirlenir
	gtk_container_set_border_width (GTK_CONTAINER (window), 2);
	
	// Objeleri istediğimiz yere yerleştirebileceğiz
	fixed = gtk_fixed_new ();
	gtk_widget_show (fixed);
	gtk_container_add (GTK_CONTAINER (window), fixed);
	
	// Text ve kaydırma çubuğu için
	table=gtk_table_new(1,1,FALSE);
	gtk_widget_show (table);
	
	// Buton oluşturulur
	karistir = gtk_button_new_with_label(utf8("Çevir"));
	gtk_widget_show (karistir);
	gtk_fixed_put (GTK_FIXED (fixed), karistir, 240, 152);
	gtk_widget_set_size_request (karistir, 48, 23);
	
	//
	adj1 = gtk_adjustment_new (0.0, 0.0, 101.0, 0.1, 1.0, 1.0);
	
	// Text alanı
	view = gtk_text_view_new ();
	gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
	buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
	gtk_text_buffer_set_text (buffer, utf8("Cümlenin sonunda boşluk bırakın "), -1);
	gtk_widget_show (view);
	
	
	scroll = gtk_scrolled_window_new (NULL, NULL);
	gtk_widget_show (scroll);
	gtk_fixed_put (GTK_FIXED (fixed), scroll, 8, 8);
	gtk_widget_set_size_request (scroll, 300, 140);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
	
	gtk_container_add (GTK_CONTAINER (scroll),view);
	
	
	// Font ayarlamasını yapıyoruz
	font_desc = pango_font_description_from_string ("Serif 12");
	gtk_widget_modify_font (view, font_desc);
	pango_font_description_free (font_desc);
	
	// Renklendirme
	gdk_color_parse ("blue", &color);
	gtk_widget_modify_text (view, GTK_STATE_NORMAL, &color);
	
	// Sol kenardan bırakılacak boşluk
	gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 10);
	
	// Daha sonra kullanılmak üzere bir yapı belirleniyor
	tag = gtk_text_buffer_create_tag (buffer, "blue_foreground",
					  "foreground", "red", NULL);
	
	// Olaylar
	g_signal_connect ((gpointer) karistir, "clicked",
			   GTK_SIGNAL_FUNC (karistir_clicked),
			   NULL);
	
	gtk_signal_connect (GTK_OBJECT (window), "destroy",
			    GTK_SIGNAL_FUNC(kapat),
			    NULL);
	
	gtk_widget_show  (window);						// form ekrana gösteriliyor

	gtk_main ();

	return 0;
}


Derlemek için;
gcc karistir.c -o karistir `pkg-config --cflags --libs gtk+-2.0`


Öğrenmesi çok zor değil ve isterseniz win'e de portlayabilirsiniz. Bir programcı daha ne isterki?