// Dizinin tüm elemanlarını gez int i, x, y; for(i=0; i<sizeof(A); i++) { // Eğer eleman bir rakam değilse (operatörse) if(!isDigit(A[i])) { // Stackten 2 rakam çekilip işleme sokulacak. // Stackte rakam yoksa ifadede olması gerekenden fazla operatör vardır. if(isEmpty(stackPtr)) { printf("ERROR: Too many operators!\n"); return 1; } // Stackten bir rakam çek x = pop(&stackPtr); // Stackten bir rakam çekilince, stackte başka rakam kalmadıysa ifadede 1 rakam eksik demektir. if(isEmpty(stackPtr)) { printf("ERROR: Missing operands!\n"); return 1; } // İkinci rakamı çek: y = pop(&stackPtr); // İki rakamı işleme sokup, sonucu stacke at push(&stackPtr, calculate( y, x, A[i] ) ); } else { // Eğer eleman rakamsa sadece stack'e at push(&stackPtr, A[i]); }
}
// Stackte kalan son eleman sonuçtur: printf("Result: %d\n", pop(&stackPtr)); // Hafızayı temizle deleteStack(stackPtr); return 0; } void printStack(StackNodePtr stackPtr) { StackNodePtr ptr = stackPtr; while(ptr != NULL) { printf("%d ", ptr->data); ptr = ptr->nextPtr; } } int calculate(int x, int y, char operation) { switch(operation) { case '+': return x+y; case '-': return x-y; case '*': return x*y; case '/': return x/y; } printf("ERROR: Invalid operator \"%c\"\n", operation ); exit(EXIT_FAILURE); return 0; } int isDigit(char c) { return (c > -1 && c < 10) ? 1 : 0; } void push(StackNodePtr* stackPtr, int data) {
if(*stackPtr == NULL) { // Stack boşsa, yeni oluşturulan node stack'in ilk elemanıdır *stackPtr = newStackNode(data);
} else { // Stack doluysa, oluşturulan yeni node'un nextPtr değeri, stack pointerı gösterir // Yeni stack pointer da, son eleman olan, yeni node'u göstermeli. StackNodePtr temp = *stackPtr; *stackPtr = newStackNode(data); (*stackPtr)->nextPtr = temp; } } int pop(StackNodePtr* stackPtr) { // Stack pointerın tuttuğu veri return edilmeli // Stack pointerın gösterdiği node free edilmeli // Stack pointer artık, eski stack pointerın nextPtr değerini almalı. StackNodePtr ptr = *stackPtr; ptr = ptr->nextPtr; int data = (*stackPtr)->data; free(*stackPtr); *stackPtr = ptr; return data; } int isEmpty(StackNodePtr stackPtr) { return stackPtr == NULL ? 1 : 0; } StackNodePtr newStackNode(int data) { StackNodePtr stackPtr = malloc( sizeof(StackNode) ); stackPtr->data = data; stackPtr->nextPtr = NULL; return stackPtr; } void deleteStack(StackNodePtr stackPtr) { StackNodePtr nextNode = stackPtr; while(stackPtr != NULL) { nextNode = nextNode->nextPtr; free(stackPtr); stackPtr = nextNode; } }
Bunu iyi öğren, çok önemli. İnternette stackin anlatıldığı yüzlerce kaynak bulabilirsin. Matematik mühendisliği okuyorsan algoritma ve programlama yönün kuvvetli olmalı.
C programlama ödevime yardım ederseniz çok sevinirim. işin içinden çıkamadım. Şimdiden çok teşekkürler.
Q14. Write a complete C program that calculates the distance according to given speed and amount of gasoline in tankful of a car. Use Do-While construction. a) Car has 50 liters (litre) of a tankful. b) Your program will take “speed” and “amount of gasoline” from user. c) Then, your program will calculate the distance according to following table (Table-1) and display it on command prompt. d) This cycle will continue until the tankful is empty (amount of gasoline is “0 ”). e) Your program must control the amount of gasoline and speed.
For example: If the current amount of gasoline is bigger than previous amount of gasoline or 50 liters in the initial condition, your pogram should display a warning message. Speed values can be between 0-169. If the user enters bigger speed values than 169, he/she should see a warning message on the screen like “Speed values must be between 0-169”.
Example output: Amount of gasoline : 50 liters Current speed : 80 km/h Distance (km) : 819.672 km Amount of gasoline : 40 liters Current speed : 100 km/h Distance (km) : 588.235 km Amount of gasoline : 20 liters Current speed : 150 km/h Distance (km) : 240.963 km
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi matmuhendisi -- 4 Kasım 2017; 16:21:19 >
< Bu ileti mobil sürüm kullanılarak atıldı >