From 41a02001bcb75ecf61d5a4716ad9e5eac5afd91a Mon Sep 17 00:00:00 2001
From: sayanmitracode <sayan.mitra@gmail.com>
Date: Tue, 2 Oct 2018 23:50:22 -0500
Subject: [PATCH] lecture 12

---
 Fall2018/lec12_ptrarray.c  |  35 ++++++++
 Fall2018/lec12_swap.c      |  26 ++++++
 Fall2018/lec12_switch.c    |  28 ++++++
 Fall2018/lec3_poly.asm     |  47 ++++++++++
 Fall2018/lec4_usestack.asm | 111 +++++++++++++++++++++++
 Fall2018/lec5_calc.asm     | 176 +++++++++++++++++++++++++++++++++++++
 Fall2018/lec5_palin.asm    | 126 ++++++++++++++++++++++++++
 Fall2018/lec8_quad.c       |  34 +++++++
 Fall2018/test.asm          | 127 ++++++++++++++++++++++++++
 Fall2018/test.c            |  30 +++++++
 10 files changed, 740 insertions(+)
 create mode 100644 Fall2018/lec12_ptrarray.c
 create mode 100644 Fall2018/lec12_swap.c
 create mode 100644 Fall2018/lec12_switch.c
 create mode 100644 Fall2018/lec3_poly.asm
 create mode 100644 Fall2018/lec4_usestack.asm
 create mode 100644 Fall2018/lec5_calc.asm
 create mode 100644 Fall2018/lec5_palin.asm
 create mode 100644 Fall2018/lec8_quad.c
 create mode 100644 Fall2018/test.asm
 create mode 100644 Fall2018/test.c

diff --git a/Fall2018/lec12_ptrarray.c b/Fall2018/lec12_ptrarray.c
new file mode 100644
index 0000000..0bf0045
--- /dev/null
+++ b/Fall2018/lec12_ptrarray.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <string.h>
+
+
+int main()
+{
+  char str[20];
+  char *sptr;
+  sptr = &str[0];
+  char achr;
+  int i;
+  int n = strlen(str);
+  printf("\n length of string is %d",n);
+  printf("Enter a string with less than 20 characters: ");
+  scanf("%s", str);
+  scanf("%c",&achr);
+  printf("\n string = %s of lenght=%lu \n",str,strlen(str));
+  i = 0;
+ while(str[i]!='\0')
+    {
+      if(i%2 ==0)
+	*(str+i) = *(str+i)+2;
+      else 
+	*(str+i) = ' ';
+      i++;
+    }
+ i=0;
+  while(str[i]!='\0')
+    {
+      printf("%d. %c %c %c %c\n",i,str[i], *(str + i), *(&str[0]+i), *(sptr+i));
+      i++;
+    }
+      
+  return 0;
+}
diff --git a/Fall2018/lec12_swap.c b/Fall2018/lec12_swap.c
new file mode 100644
index 0000000..3fdc586
--- /dev/null
+++ b/Fall2018/lec12_swap.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+
+int swap(int * arg_a, int * arg_b);
+
+int main()
+{
+  int a = 4;
+  int b = 400;
+  printf("\n Before a = %d, b = %d", a,b);
+  printf("\n addresses a = %p, b = %p", &a,&b);
+  swap(&a,&b);
+  printf("\n After a = %d, b = %d", a,b);
+  printf("\n addresses a = %p, b = %p", &a,&b);
+  
+  return 0;
+}
+
+
+int swap(int * arg_a, int * arg_b)
+{
+  int temp;
+  temp = *arg_a;
+  *arg_a = *arg_b;
+  *arg_b = temp;
+  return 0;
+}
diff --git a/Fall2018/lec12_switch.c b/Fall2018/lec12_switch.c
new file mode 100644
index 0000000..da702cc
--- /dev/null
+++ b/Fall2018/lec12_switch.c
@@ -0,0 +1,28 @@
+#include<stdio.h>
+
+
+int main()
+{
+  int a;
+  printf("\n Enter a choice (0-2)");
+  scanf("%d",&a);
+
+  switch (a){
+  case 0: //
+    {
+      printf("You chose 0");
+      break;
+    }
+ case 1: //
+    {
+      printf("You chose 1");
+      break;
+    }
+ case 2: //
+    {
+      printf("You chose 2");
+      break;
+    }
+  }
+    return 0;
+}
diff --git a/Fall2018/lec3_poly.asm b/Fall2018/lec3_poly.asm
new file mode 100644
index 0000000..d04f8b2
--- /dev/null
+++ b/Fall2018/lec3_poly.asm
@@ -0,0 +1,47 @@
+.ORIG x3000
+
+	
+;;; MAIN
+	LD R1, VAL_X
+	LD R2, VAL_X
+	JSR MULT		;R0<- X^2
+	ADD R4, R0, #0		;R4 <- X^2
+	ADD R1, R4, #0		;R1 <- X2
+	JSR MULT		;R0 <- X3
+	ADD R5, R0, #1 		;
+	LD R2, VAL_A
+	ADD R1, R5, #0		;
+	JSR MULT		; R0 <- a X^#
+	
+
+
+
+VAL_A .FILL x7
+VAL_B .FILL x5
+VAL_C .FILL x9
+VAL_X .FILL x4
+	
+
+SUBTR
+;;; INPUT: R1, R2,
+;;; OUTPUT: R0 = R1 - R2
+
+	ST R2, saveR2SUB
+	ST R4, saveR4SUB
+	NOT R2, R2
+	ADD R2, R2, #1
+	ADD R0, R1, R2
+	LD R2, saveR2SUB
+	LD R4, saveR4SUB
+	RET
+
+	saveR2SUB .BLKW 1
+
+MULT
+;;; INPUT: R1, R2
+;;; OUTPUT: R0 <- R1 * R2
+;;; Assumes all positive
+;;; preserves the values of R1, R2
+
+
+.END
diff --git a/Fall2018/lec4_usestack.asm b/Fall2018/lec4_usestack.asm
new file mode 100644
index 0000000..37fc13f
--- /dev/null
+++ b/Fall2018/lec4_usestack.asm
@@ -0,0 +1,111 @@
+.ORIG x3000
+
+;;; Demonstration of a stack
+
+MAIN
+	;; Pushes multiples of in the stack and then pops them
+	AND R4,R4,#0		;
+	AND R1, R1,#0
+	LD R2, ASCII
+	ADD R1, R1, #5
+PUSHLOOP ADD R4, R4, #1
+	ADD R0, R4, #0
+	JSR PUSH 
+	ADD R1, R1, #-1
+	BRP PUSHLOOP
+	ADD R1, R1, #6
+POPLOOP 
+	JSR POP
+	ADD R0, R0, R2
+	OUT
+	ADD R1, R1, #-1
+	BRP POPLOOP
+	HALT
+
+ASCII .fill  x30 
+	
+	
+
+
+
+
+
+;;; Pushes R0 at the top of the stack
+;;; IN: R0
+;;; OUT: R5 (0-success; 1 fail)
+;;; USES: R3: stack end, R4: stack_top
+
+
+
+
+	
+PUSH
+	;; Save registers
+	ST R3, saveR3push
+	ST R4, saveR4push
+	;; Set R5 to 0
+	AND R5, R5, #0
+	;; Lod top and end
+	LD R3, stack_end
+	LD R4, stack_top
+	;; check full: end-1 = top
+	ADD R3, R3, #-1
+	NOT R3, R3
+	ADD R3, R3, #1
+	Add R3, R4, R3		;R3 = top - (end -1)
+	BRz OVERFLOW
+	;; not overflow
+	STR R0, R4, #0		;push R0
+	ADD R4, R4, #-1
+	ST R4, stack_top	;move top of stack up by one
+	BRNZP PUSH_DONE
+OVERFLOW
+	ADD R5, R5, #1
+PUSH_DONE
+	;; restore registers
+	LD R3, saveR3push
+	LD R4, saveR4push
+	RET
+	
+	saveR4push .BLKW 1
+	saveR3push .BLKW 1
+	
+;;; POPs and stores in R0
+;;; IN: none
+;;; OUT: R5 (0-success; 1 fail); poped value in R0
+;;; USES: R3: stack_start, R4: stack_top
+	
+POP
+	;; Save registers
+	ST R3, saveR3pop
+	ST R4, saveR4pop
+	;; Set R5 to 0
+	AND R5, R5, #0
+	;; Lod top and end
+	LD R3, stack_start
+	LD R4, stack_top
+	;; check full: start = top
+	NOT R3, R3
+	ADD R3, R3, #1
+	Add R3, R4, R3		;R3 = top - start
+	BRz UNDERFLOW
+	;; not underflow
+	LDR R0, R4, #0		;R0<- popped value
+	ADD R4, R4, #1		;update stack pointer
+	ST R4, stack_top
+	BRNZP POP_DONE
+UNDERFLOW
+	ADD R5, R5, #1
+POP_DONE
+	;; restore registers
+	LD R3, saveR3pop
+	LD R4, saveR4pop
+	RET
+	
+	saveR4pop .BLKW 1
+	saveR3pop .BLKW 1
+
+	stack_start .FILL x3600
+	stack_end .FILL x35F0
+	stack_top .FILL x3600
+	.END
diff --git a/Fall2018/lec5_calc.asm b/Fall2018/lec5_calc.asm
new file mode 100644
index 0000000..bec093f
--- /dev/null
+++ b/Fall2018/lec5_calc.asm
@@ -0,0 +1,176 @@
+; stack implementation
+
+.ORIG x3000
+
+	;; R1: address of the char to be read
+	;; R2: char being read
+	;; R3, R4: operands popped from stack
+	;; R0: item to push on stack
+	;; R5: ASCII values on '0', '9', '+', etc. used for checks
+	LEA R1, string_start
+READ_LOOP	
+	;; read char
+	LDR R2, R1, #0
+	BRz DONE_READ 		;; if end finish
+	;; prepare output 
+	ADD R0, R2, #0
+	OUT
+	;; check for number '0' <= R2 <= '9'
+	LD R5, char_val_0
+	NOT R5, R5
+	ADD R5, R5,#1
+	ADD R3, R2, R5	; R3 < '0' i.e., R3 <- R2 - '0'
+	BRN HANDLE_OPERATORS
+	NOT R3, R2
+	ADD R3, R3, #1		; R3 <- -R2
+	LD R5, char_val_9
+	ADD R5, R5, R2		; R3 <-  '9' - R2
+	BRN DONE_CHAR
+	;; handle operands
+	;; convert and push operands
+	LD R5, char_val_0
+	NOT R5, R5
+	ADD R5, R5, #1
+	ADD R0, R5, R0		; R0 <- numerical value of operand
+	JSR PUSH		; PUSH R0
+	BRNZP DONE_CHAR	
+
+HANDLE_OPERATORS
+	;; non_chars
+	JSR POP
+	ADD R3, R0, #0		; R3 <- POP
+	JSR POP
+	ADD R4, R0, #0		; R4 <- POP
+	;; do operators
+	NOT R2, R2
+	ADD R2, R2, #1		; R2 <- negation of char operator
+	LD R5, char_val_plus
+	ADD R5, R2, R5		; R5 <- '+' - R2
+	BRNP NOT_ADD
+	ADD R0, R3, R4		;R0 <- R3 + R4
+	JSR PUSH		;PUSH result
+	BRNZP DONE_CHAR
+
+	;; not add
+NOT_ADD
+	;; subtraction
+	LD R5, char_val_sub
+	ADD R5, R2, R5		; R5 <- '-' - R2
+	BRNP NOT_MINUS
+	NOT R4, R4
+	ADD R4, R4, #1
+	ADD R0, R3, R4		; R0 <- R3 - R4
+	JSR PUSH
+	BRNZP DONE_CHAR
+
+	;; not subtraction
+NOT_MINUS
+	;; multiplication
+	LD R5, char_val_mul
+	ADD R5, R2, R5		; R5 <- '*' - R2
+	BRNP NOT_MULTI
+	AND R0, R0, #0
+MULT_LOOP
+	ADD R0, R4, R0
+	ADD R3, R3, #-1
+	BRP MULT_LOOP
+	JSR PUSH
+	BRNZP DONE_CHAR
+	;; not multiplication
+NOT_MULTI
+	BRNZP DONE_CHAR
+		
+DONE_CHAR	
+	ADD R1, R1, #1
+	BRNZP READ_LOOP
+	
+DONE_READ	
+	HALT
+
+	
+	
+	;; POP
+	;;  IN: nothing
+	;;  OUT: if stack is successful (not empty) then R0 will contain the value poped R5 will be 1
+	;; 	else R5 will be 0
+POP
+	;;  save registers
+	ST R3, POP_save_R3
+	ST R4, POP_save_R4
+	;; check empty
+	LD R4, STACK_TOP
+	LD R3, STACK_START
+	;;  clear register 5
+	AND R5, R5, #0
+	;; stack underflow stack_top = stack_start
+	NOT R3, R3
+	ADD R3, R3, #1
+	ADD R3, R3, R4
+	BRZ STACK_UNDERFLOW
+	ADD R4, R4, #1
+	LDR R0, R4, #0
+	;; update top
+	ST R4, STACK_TOP
+	BRnzp POP_DONE
+STACK_UNDERFLOW
+	ADD R5, R5, #1
+POP_DONE
+	;;  restore register
+	LD R3, POP_save_R3
+	LD R4, POP_save_R4
+	RET
+
+;;  push data
+POP_save_R3 .BLKW #1
+POP_save_R4 .BLKW #1
+
+	
+	;; PUSH
+	;; IN: R0 will contain value to be pushed
+	;; OUTPUT: R5 = 0 success if stack is not full, update stack
+	;;  	      = 1 fail if stack is full, stack remains unchanged
+PUSH
+	;;  save registers
+	ST R3, PUSH_save_R3
+	ST R4, PUSH_save_R4
+	;; check full
+	LD R4, STACK_TOP
+	LD R3, STACK_END
+	;;  
+	AND R5, R5, #0		
+	;; check stack_end - 1 = stack_top
+	ADD R3, R3, #1
+	NOT R3, R3
+	ADD R3, R3, #1		; R3 <- -(stack_end - 1)
+	ADD R3, R3, R4
+	BRz STACK_OVERFLOW
+	;; save item
+	STR R0, R4, #0		;
+	ADD R4, R4, #-1
+	ST R4, STACK_TOP
+	BRnzp PUSH_DONE
+STACK_OVERFLOW
+	ADD R5, R5, #1
+PUSH_DONE
+	;;  restore register
+	LD R3, PUSH_save_R3
+	LD R4, PUSH_save_R4
+	RET
+
+;;  push data
+PUSH_save_R3 .BLKW #1
+PUSH_save_R4 .BLKW #1
+
+	
+; data
+STACK_TOP .FILL x4000 	
+STACK_START .FILL x4000
+STACK_END .FILL x3F00
+string_start .STRINGZ "34+5*"
+char_val_0 .Fill x30
+char_val_9 .Fill x39
+char_val_plus .Fill x2B
+char_val_sub .Fill x2D
+char_val_mul .Fill x2A
+	
+	.END
diff --git a/Fall2018/lec5_palin.asm b/Fall2018/lec5_palin.asm
new file mode 100644
index 0000000..6d7dbbc
--- /dev/null
+++ b/Fall2018/lec5_palin.asm
@@ -0,0 +1,126 @@
+.ORIG x3000
+
+;;; checking a palindrome
+
+MAIN
+	;; R1: addres of char to read
+	;;;  R2: char being read
+	;; R5 = 1 not palindrome
+	;; = 0 palindrome
+	AND R5, R5, #0
+	LEA R1, string_start
+READ_LOOP
+	LDR R2, R1, #0
+	BRZ DONE_READ
+	ADD R0, R2, #0
+	ST R5, saveR5palin
+	JSR PUSH
+	LD R5, saveR5palin
+	ADD R1, R1, #1
+	BRNZP READ_LOOP
+DONE_READ
+	LEA R1, string_start
+CHECK_LOOP
+	LDR R2, R1, #0
+	BRZ DONE
+	ST R5, saveR5palin
+	JSR POP			;R0 <- char
+	LD R5, saveR5palin
+	NOT R2, R2
+	ADD R2, R2, #1
+	ADD R2, R2, R0		;R2 <- char - popped val
+	BRNP MISMATCH
+	ADD R1, R1, #1
+	BRNZP CHECK_LOOP
+MISMATCH ADD R5, R5, #1
+DONE	
+	HALT
+
+ASCII .fill  x30 
+STRING_start .stringz "kayok"	
+	
+	
+
+saveR5palin .BLKW 1
+
+
+
+;;; Pushes R0 at the top of the stack
+;;; IN: R0
+;;; OUT: R5 (0-success; 1 fail)
+;;; USES: R3: stack end, R4: stack_top
+
+
+
+
+	
+PUSH
+	;; Save registers
+	ST R3, saveR3push
+	ST R4, saveR4push
+	;; Set R5 to 0
+	AND R5, R5, #0
+	;; Lod top and end
+	LD R3, stack_end
+	LD R4, stack_top
+	;; check full: end-1 = top
+	ADD R3, R3, #-1
+	NOT R3, R3
+	ADD R3, R3, #1
+	Add R3, R4, R3		;R3 = top - (end -1)
+	BRz OVERFLOW
+	;; not overflow
+	STR R0, R4, #0		;push R0
+	ADD R4, R4, #-1
+	ST R4, stack_top	;move top of stack up by one
+	BRNZP PUSH_DONE
+OVERFLOW
+	ADD R5, R5, #1
+PUSH_DONE
+	;; restore registers
+	LD R3, saveR3push
+	LD R4, saveR4push
+	RET
+	
+	saveR4push .BLKW 1
+	saveR3push .BLKW 1
+	
+;;; POPs and stores in R0
+;;; IN: none
+;;; OUT: R5 (0-success; 1 fail); poped value in R0
+;;; USES: R3: stack_start, R4: stack_top
+	
+POP
+	;; Save registers
+	ST R3, saveR3pop
+	ST R4, saveR4pop
+	;; Set R5 to 0
+	AND R5, R5, #0
+	;; Lod top and end
+	LD R3, stack_start
+	LD R4, stack_top
+	;; check full: start = top
+	NOT R3, R3
+	ADD R3, R3, #1
+	Add R3, R4, R3		;R3 = top - start
+	BRz UNDERFLOW
+	;; not underflow
+	ADD R4, R4, #1		;update stack pointer	
+	LDR R0, R4, #0		;R0<- popped value
+	ST R4, stack_top
+	BRNZP POP_DONE
+UNDERFLOW
+	ADD R5, R5, #1
+POP_DONE
+	;; restore registers
+	LD R3, saveR3pop
+	LD R4, saveR4pop
+	RET
+	
+	saveR4pop .BLKW 1
+	saveR3pop .BLKW 1
+
+	stack_start .FILL x3600
+	stack_end .FILL x35F0
+	stack_top .FILL x3600
+	.END
diff --git a/Fall2018/lec8_quad.c b/Fall2018/lec8_quad.c
new file mode 100644
index 0000000..ffe611a
--- /dev/null
+++ b/Fall2018/lec8_quad.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <math.h>
+// finding roots of a quadratic equations
+/* Sept 2018
+   ECE 220
+ */
+
+int main()
+{
+  float a,b,c,det;
+  float x1,x2;
+  printf("\n Input the coefficients a,b,c:");
+  scanf("%f %f %f", &a,&b,&c);
+  det = b*b - (4 * a * c);
+  if (det == 0)
+    {
+      x1 = -(b/(2*a));
+      x2 = x1;
+      printf("\n Repeated roots at %f %f\n", x1, x2);
+    }
+  else if (det > 0)
+    {
+      x1 = (-b + sqrt(det))/(2*a);
+      x2 = (-b - sqrt(det))/(2*a);
+     printf("\n Distinct real roots at %f %f\n", x1, x2);
+    }
+  else // det < 0
+    {
+      x1 = -b/(2*a);
+      x2 = sqrt(-det)/(2*a);
+      printf("\n Distinct complex roots at %f+i%f, and %f-i%f\n", x1,x2, x1, x2);    
+    }
+  return 0;
+}
diff --git a/Fall2018/test.asm b/Fall2018/test.asm
new file mode 100644
index 0000000..c91d20e
--- /dev/null
+++ b/Fall2018/test.asm
@@ -0,0 +1,127 @@
+.ORIG x3000
+
+;;; checking a palindrome
+
+MAIN
+	;; R1: addres of char to read
+	;;;  R2: char being read
+	;; R5 = 1 not palindrome
+	;; = 0 palindrome
+	;; R6: 1 (overflow) 0 (normal) 
+	LEA R1, STRING_start
+	AND R5, R5, #0
+READ_LOOP
+	LDR R2, R1, #0
+	BRZ DONE_READ
+	ADD R0, R2, #0
+	ST R5, saveR5palin
+	JSR PUSH
+	;; check for stack overlow
+	ADD R6, R5, #0
+	LD R5, saveR5palin
+	ADD R1, R1, #1
+	BRNZP READ_LOOP
+DONE_READ
+	LEA R1, STRING_start
+CHECK_LOOP
+	LDR R2, R1, #0
+	BRZ DONE
+	ST R5, saveR5palin
+	JSR POP			;R0 <- popped char
+	LD R5, saveR5palin
+	NOT R0, R0
+	ADD R0, R0, #1
+	ADD R0, R2, R0		;R0 <- reach car - popped char
+	BRNP MISMATCH
+	ADD R1, R1, #1
+	BRNZP CHECK_LOOP
+MISMATCH
+	ADD R5, R5, #1
+DONE				;end
+
+	HALT
+
+STRING_start .stringz "kayok"	
+	
+saveR5palin .BLKW 1
+
+
+
+;;; Pushes R0 at the top of the stack
+;;; IN: R0
+;;; OUT: R5 (0-success; 1 fail)
+;;; USES: R3: stack end, R4: stack_top
+
+
+
+	
+PUSH
+	;; Save registers
+	ST R3, saveR3push
+	ST R4, saveR4push
+	;; Set R5 to 0
+	AND R5, R5, #0
+	;; Lod top and end
+	LD R3, stack_end
+	LD R4, stack_top
+	;; check full: end-1 = top
+	ADD R3, R3, #-1
+	NOT R3, R3
+	ADD R3, R3, #1
+	Add R3, R4, R3		;R3 = top - (end -1)
+	BRz OVERFLOW
+	;; not overflow
+	STR R0, R4, #0		;push R0
+	ADD R4, R4, #-1
+	ST R4, stack_top	;move top of stack up by one
+	BRNZP PUSH_DONE
+OVERFLOW
+	ADD R5, R5, #1
+PUSH_DONE
+	;; restore registers
+	LD R3, saveR3push
+	LD R4, saveR4push
+	RET
+	
+	saveR4push .BLKW 1
+	saveR3push .BLKW 1
+	
+;;; POPs and stores in R0
+;;; IN: none
+;;; OUT: R5 (0-success; 1 fail); poped value in R0
+;;; USES: R3: stack_start, R4: stack_top
+	
+POP
+	;; Save registers
+	ST R3, saveR3pop
+	ST R4, saveR4pop
+	;; Set R5 to 0
+	AND R5, R5, #0
+	;; Lod top and end
+	LD R3, stack_start
+	LD R4, stack_top
+	;; check full: start = top
+	NOT R3, R3
+	ADD R3, R3, #1
+	Add R3, R4, R3		;R3 = top - start
+	BRz UNDERFLOW
+	;; not underflow
+	ADD R4, R4, #1		;update stack pointer	
+	LDR R0, R4, #0		;R0<- popped value
+	ST R4, stack_top
+	BRNZP POP_DONE
+UNDERFLOW
+	ADD R5, R5, #1
+POP_DONE
+	;; restore registers
+	LD R3, saveR3pop
+	LD R4, saveR4pop
+	RET
+	
+	saveR4pop .BLKW 1
+	saveR3pop .BLKW 1
+
+	stack_start .FILL x3600
+	stack_end .FILL x35F0
+	stack_top .FILL x3600
+	.END
diff --git a/Fall2018/test.c b/Fall2018/test.c
new file mode 100644
index 0000000..cffb548
--- /dev/null
+++ b/Fall2018/test.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <math.h>
+// finding roots of a quadratic equations
+
+int main()
+{
+  float a,b,c,d,x1,x2;
+  scanf("%f %f %f",&a, &b,&c);
+  d = b*b - 4 * a  * c;
+  if (d == 0)
+    {
+      x1 = -b / (2 * a);
+      x2 = x1;
+      printf("\n repeated root at %f", x1);         
+    }
+  else if ( d > 0)
+    {
+      x1 = (-b + sqrt(d)) / (2 * a);
+      x2 = (-b - sqrt(d)) / (2 * a);
+      printf("\n real roots at %f %f", x1, x2);         
+    }
+  else 
+    {
+      x1 = sqrt(-d) / (2 * a);
+      x2 = -b/ (2 * a);
+      printf("\n complex roots at %f+i %f and  %f -i %f", x2, x1, x2, x1);         
+    }
+
+  return 0;
+  }
-- 
GitLab