## C++ || Snippet – How To Swap Two Numbers Without Using A Third “Temporary” Variable

The following are three programs which demonstrates how to swap two numbers without using a third “temporary” variable.

Why would anyone want to swap two numbers without utilizing a third variable? There is no real reason to do so other than the fact that exercises such as these are typically used as programming assignments/interview questions. This is a technique that’s rarely ever practical in a real world setting, but it is still an interesting task nonetheless.

``` #1 - Using Simple Math C++ #include <iostream> using namespace std; int main() { // declare variables int x = 0; int y = 0; // get data cout <<"Please enter two numbers: "; cin >> x >> y; cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; cout <<"nSwitching the numbers..n"; // switch the numbers using simple math x = x+y; y = x-y; x = x-y; cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; return 0; }// http://programmingnotes.org/ 12345678910111213141516171819202122232425262728 #include <iostream>using namespace std; int main() { // declare variables int x = 0; int y = 0;  // get data cout <<"Please enter two numbers: "; cin >> x >> y;  cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl;  cout <<"nSwitching the numbers..n"; // switch the numbers using simple math x = x+y; y = x-y; x = x-y;  cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; return 0;}// http://programmingnotes.org/ ```

SAMPLE OUTPUT:

`Please enter two numbers: 7 28`

``` Item #1 = 7 Item #2 = 28 Switching the numbers.. ```

```Item #1 = 28 Item #2 = 7 ```

``` #2 - Using The XOR Swap Algorithm C++ #include <iostream> using namespace std; int main() { // declare variables int x = 0; int y = 0; // get data cout <<"Please enter two numbers: "; cin >> x >> y; cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; cout <<"nSwitching the numbers..n"; // switch the numbers using the xor swap algorithm x ^= y; y ^= x; x ^= y; cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; return 0; }// http://programmingnotes.org/ 12345678910111213141516171819202122232425262728 #include <iostream>using namespace std; int main() { // declare variables int x = 0; int y = 0;  // get data cout <<"Please enter two numbers: "; cin >> x >> y;  cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl;  cout <<"nSwitching the numbers..n"; // switch the numbers using the xor swap algorithm x ^= y; y ^= x; x ^= y;  cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; return 0;}// http://programmingnotes.org/ ```

SAMPLE OUTPUT:

`Please enter two numbers: 5 12453`

``` Item #1 = 5 Item #2 = 12453 Switching the numbers.. ```

```Item #1 = 12453 Item #2 = 5 ```

``` #3 - Using The In-Built Swap Function C++ #include <iostream> #include <algorithm> using namespace std; int main() { // declare variables int x = 0; int y = 0; // get data cout <<"Please enter two numbers: "; cin >> x >> y; cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; cout <<"nSwitching the numbers..n"; // switch the numbers using the in-built swap function swap(x, y); cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; return 0; }// http://programmingnotes.org/ 123456789101112131415161718192021222324252627 #include <iostream>#include <algorithm>using namespace std; int main() { // declare variables int x = 0; int y = 0;  // get data cout <<"Please enter two numbers: "; cin >> x >> y;  cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl;  cout <<"nSwitching the numbers..n"; // switch the numbers using the in-built swap function swap(x, y);  cout <<"nItem #1 = "<<x<<endl; cout <<"Item #2 = "<<y<<endl; return 0;}// http://programmingnotes.org/ ```

SAMPLE OUTPUT:

`Please enter two numbers: 2132 6547546`

``` Item #1 = 2132 Item #2 = 6547546 Switching the numbers.. ```

```Item #1 = 6547546 Item #2 = 2132 ```

## Assembly || How To Obtain & Display Integer Data

Displaying text to the screen was discussed in the previous article, and this page will be more of the same. Utilizing the printf and scanf functions which are available in C, this page will demonstrate how to obtain and display integer data; and more importantly, demonstrate how to store a 64-bit integer into an assembly program.

==== Obtain & Display Integer Data ====

Here is our driver.c file, which starts things off.

``` #1 - driver.c -- This Starts Things Off C // ========================================================================================================== // Author: K Perkins // Date: Jul 12, 2012 // Program: Display A Number // Taken From: http://programmingnotes.org/ // File: driver.c // // Purpose: This is the driver to the "Display A Number" program. Driver.c only calls displayNum.asm. This // file is used just as a "driver" and demostrates how to use a C file along with an Assembly file to // create one working program. Once the Assembly file finishes, control of the program is then passed back // to the driver.c file, then the program closes // // ----- These are the commands to link all the files together ------- // // (1) Compile driver.c file: gcc -c -Wall -m64 -std=c99 -l driver.lis -o driver.o driver.c // (2) displayNum.asm assembler file: nasm -f elf64 -l displayNum.lis -o displayNum.o displayNum.asm // (3) Link all files: gcc -m64 -o displayNum.out driver.o displayNum.o // (4) Execute in 64-bit protected mode: ./displayNum.out // // ===== Begin code area ==================================================================================== #include <stdio.h> // external function prototype extern unsigned long int DisplayNum(); int main() { // declare variable unsigned long int returnCode = 1987; // display message to the screen printf("nnWelcome to My Programming Notes' Assembly Program.n"); printf("nControl will now be passed to the Assembly file...nn"); // here is a function call to the assembly file, where the asm file passes // back a return code to this current file, which will be displayed below returnCode = DisplayNum(); printf("nControl has now been passed back from the Assembly file to the C file!n"); printf("nThe return code is: %lu", returnCode); printf("nnBYE!n"); return returnCode; }// http://programmingnotes.org/ 123456789101112131415161718192021222324252627282930313233343536373839404142434445 // ==========================================================================================================// Author: K Perkins// Date:   Jul 12, 2012// Program: Display A Number// Taken From: http://programmingnotes.org/// File:  driver.c//// Purpose: This is the driver to the "Display A Number" program. Driver.c only calls displayNum.asm. This //  file is used just as a "driver" and demostrates how to use a C file along with an Assembly file to //  create one working program. Once the Assembly file finishes, control of the program is then passed back //  to the driver.c file, then the program closes////              ----- These are the commands to link all the files together -------//// (1) Compile driver.c file:                 gcc -c -Wall -m64 -std=c99 -l driver.lis -o driver.o driver.c// (2) displayNum.asm assembler file:         nasm -f elf64 -l displayNum.lis -o displayNum.o displayNum.asm// (3) Link all files:                        gcc -m64 -o displayNum.out driver.o displayNum.o// (4) Execute in 64-bit protected mode:     ./displayNum.out//// ===== Begin code area ====================================================================================#include <stdio.h>  // external function prototypeextern unsigned long int DisplayNum(); int main(){    // declare variable    unsigned long int returnCode = 1987;        // display message to the screen    printf("nnWelcome to My Programming Notes' Assembly Program.n");        printf("nControl will now be passed to the Assembly file...nn");            // here is a function call to the assembly file, where the asm file passes    // back a return code to this current file, which will be displayed below    returnCode = DisplayNum();        printf("nControl has now been passed back from the Assembly file to the C file!n");    printf("nThe return code is: %lu", returnCode);    printf("nnBYE!n");           return returnCode;}// http://programmingnotes.org/ ```

The “driver” file really only has one task, and that is simply to call the assembly function named ‘DisplayNum()’ as noted on line 38. This is a routine that is present among all the code on this site. Click here for an explanation on why a “driver” is used.

And here is the assembly file.

``` #2 - displayNum.asm -- Display A Number Assembly (x86) ;================================================================================================================ ; Author: K Perkins ; Date: Jul 12, 2012 ; Program: Display A Number ; Taken From: http://programmingnotes.org/ ; File: displayNum.asm ; ; Purpose: This is the displayNum.asm file which demonstrates how to obtain & display numbers to ; the screen in assembly using C functions. ; ;===== Begin code area ========================================================================================== extern printf ;External functions printf & scanf extern scanf ;taken from the C library which will be ;used for user input/output to the screen ; segment .data ;Place initialized data here ; ;======== Text declarations & variables which will be displayed to the user ===================================== getNumber db "Please enter a number: ",0 displayNumber db "The number you just entered is: ", 0 unsignedLongIntegerInput db "%lu", 0 stringDataOutput db "%s", 0 newLine db 10, 0 displayLineSeperator db "--------------------------------------------",10,0 ; ;;========= End of text declarations which will be displayed to the user ======================================== ; segment .bss ;Place un-initialized data here ; myInt resq 1 ;Pointer for use by scanf to store a number from the user ; segment .text ;Place instruction code here ; global DisplayNum ;DisplayNum- the declarationthat is visible ;for other programs to link to it ; DisplayNum: ;This is an entry point. Execution will begin here. ; ;============= Push registers to the stack ====================================================================== ;safe programming which pushes all registers to the stack so data doesnt get corrupted push rbp push rbx push rcx push rdx push rdi push rsi push rbp push r8 push r9 push r10 push r11 push r12 push r13 push r14 push r15 ; ;================ End of Push Registers ========================================================================= ; ; Left side: X86 instructions ;Right side: the narrative 'A.K.A'the story about this program. ; ;===== #1 Display Line Seperator ================================================================================ mov qword rdi, stringDataOutput ;Prepare printf for string output mov qword rsi, displayLineSeperator ;The 'line seperator' is displayed mov qword rax, 0 ;No vector registers used call printf ;printf is going to output the data ; ;===== #2 Prompt The User For Integer Input ===================================================================== mov qword rdi, stringDataOutput ;Prepare printf for string output mov qword rsi, getNumber ;A Prompt to enter in a number will be displayed mov qword rax, 0 ;No vector registers used call printf ;printf is going to output the data ; ;===== #3 This Obtains User Input Using Scanf =================================================================== mov qword rdi, unsignedLongIntegerInput ;Prepare scanf to get one 64-bit integer mov qword rsi, myInt ;Set up indirect addressing for scanf mov qword rax, 0 ;No vector registers used. call scanf ;The unsigned long integer is placed into 'myInt' ; ;===== #4 Prompt The User That An Integer Will Be Displayed ===================================================== mov qword rdi, stringDataOutput ;Prepare printf for string output mov qword rsi, displayNumber ;A Prompt to display the number will be displayed mov qword rax, 0 ;No vector registers used call printf ;printf is going to output the data ; ;===== #5 Display The Number To User ============================================================================ mov qword rdi, unsignedLongIntegerInput ;Prepare printf to output one 64-bit integer mov qword rsi, [myInt] ;'myInt' will be passed to printf mov qword rax, 0 ;No vector registers used. call printf ;printf is going to output the data ; ;===== #6 This Prints A Newline ================================================================================= mov qword rdi, stringDataOutput ;Prepare printf to make string output mov qword rsi, newLine ;The newline character ascii code is passed to printf mov qword rax, 0 ;No vector registers used. call printf ;printf is going to output the data ; ;===== #7 Display Line Seperator ================================================================================ mov qword rdi, stringDataOutput ;Prepare printf for string output mov qword rsi, displayLineSeperator ;The 'line seperator' is displayed mov qword rax, 0 ;No vector registers used call printf ;printf is going to output the data ; ; END CODE EXECUTION FOR DISPLAYNUM.ASM ; ;====== pop the registers back from the in reverse order stack ================================================== pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop r9 pop r8 pop rbp pop rsi pop rdi pop rdx pop rcx pop rbx pop rbp ; ;===== END - RETURN TO CALLED FUNCTION ========================================================================== mov rax, 0 ;return 0 to the called function ret ;ret pops the stack taking away 8 bytes ; ; http://programmingnotes.org/ ; ;===== End of DisplayNum subprogram ============================================================================= 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 ;================================================================================================================; Author: K Perkins; Date:   Jul 12, 2012; Program: Display A Number; Taken From: http://programmingnotes.org/; File:  displayNum.asm;; Purpose: This is the displayNum.asm file which demonstrates how to obtain & display numbers to;   the screen in assembly using C functions.;;===== Begin code area ========================================================================================== extern printf                                     ;External functions printf & scanf extern scanf                                      ;taken from the C library which will be                                                   ;used for user input/output to the screen;segment .data                                     ;Place initialized data here;;======== Text declarations & variables which will be displayed to the user =====================================       getNumber                     db "Please enter a number: ",0       displayNumber                 db "The number you just entered is: ", 0       unsignedLongIntegerInput      db "%lu", 0       stringDataOutput              db "%s", 0       newLine                       db 10, 0        displayLineSeperator          db "--------------------------------------------",10,0       ;       ;;========= End of text declarations which will be displayed to the user ========================================;segment .bss                                      ;Place un-initialized data here;myInt    resq      1                              ;Pointer for use by scanf to store a number from the user;segment .text                                     ;Place instruction code here;global DisplayNum                                 ;DisplayNum- the declarationthat is visible                                                   ;for other programs to link to it;                                                  DisplayNum:                                       ;This is an entry point. Execution will begin here.;;============= Push registers to the stack ======================================================================;safe programming which pushes all registers to the stack so data doesnt get corruptedpush rbppush rbxpush rcxpush rdxpush rdi                                                  push rsi push rbp                                                   push r8                                                    push r9push r10push r11push r12push r13push r14push r15;;================ End of Push Registers =========================================================================;; Left side: X86 instructions                     ;Right side: the narrative 'A.K.A'the story about this program.;;===== #1 Display Line Seperator ================================================================================       mov qword rdi, stringDataOutput            ;Prepare printf for string output       mov qword rsi, displayLineSeperator        ;The 'line seperator' is displayed       mov qword rax, 0                           ;No vector registers used           call      printf                           ;printf is going to output the data         ;;===== #2 Prompt The User For Integer Input =====================================================================       mov qword rdi, stringDataOutput            ;Prepare printf for string output       mov qword rsi, getNumber                   ;A Prompt to enter in a number will be displayed        mov qword rax, 0                           ;No vector registers used       call      printf                           ;printf is going to output the data        ;;===== #3 This Obtains User Input Using Scanf ===================================================================       mov qword rdi, unsignedLongIntegerInput    ;Prepare scanf to get one 64-bit integer       mov qword rsi, myInt                       ;Set up indirect addressing for scanf       mov qword rax, 0                           ;No vector registers used.       call      scanf                            ;The unsigned long integer is placed into 'myInt';;===== #4 Prompt The User That An Integer Will Be Displayed =====================================================       mov qword rdi, stringDataOutput            ;Prepare printf for string output       mov qword rsi, displayNumber               ;A Prompt to display the number will be displayed        mov qword rax, 0                           ;No vector registers used       call      printf                           ;printf is going to output the data  ;;===== #5 Display The Number To User ============================================================================       mov qword rdi, unsignedLongIntegerInput    ;Prepare printf to output one 64-bit integer       mov qword rsi, [myInt]                     ;'myInt' will be passed to printf       mov qword rax, 0                           ;No vector registers used.       call      printf                           ;printf is going to output the data;;===== #6 This Prints A Newline =================================================================================       mov qword rdi, stringDataOutput            ;Prepare printf to make string output       mov qword rsi, newLine                     ;The newline character ascii code is passed to printf       mov qword rax, 0                           ;No vector registers used.       call      printf                           ;printf is going to output the data;       ;===== #7 Display Line Seperator ================================================================================       mov qword rdi, stringDataOutput            ;Prepare printf for string output       mov qword rsi, displayLineSeperator        ;The 'line seperator' is displayed       mov qword rax, 0                           ;No vector registers used           call      printf                           ;printf is going to output the data                ;; END CODE EXECUTION FOR DISPLAYNUM.ASM;;====== pop the registers back from the in reverse order stack ==================================================pop r15pop r14pop r13pop r12pop r11pop r10pop r9pop r8pop rbppop rsipop rdipop rdxpop rcxpop rbxpop rbp;;===== END - RETURN TO CALLED FUNCTION ==========================================================================       mov       rax, 0                           ;return 0 to the called function       ret                                        ;ret pops the stack taking away 8 bytes; ; http://programmingnotes.org/;      ;===== End of DisplayNum subprogram ============================================================================= ```

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

The text declarations highlighted under the segment .data section are important, particularly the variable named “unsignedLongIntegerInput.” That variable is used to obtain data from the user, as noted on line 74-77. Note, that this same variable is also used to display the integer data back to the user, which is also displayed on lines 86-89.

The rest of the code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.

After you assemble the above code (see below), you should get this as your output:

`Welcome to My Programming Notes' Assembly Program.`

``` Control will now be passed to the Assembly file... -------------------------------------------- Please enter a number: 1858 The number you just entered is: 1858 -------------------------------------------- Control has now been passed back from the Assembly file to the C file! The return code is: 0 ```

```BYE! ```

==== ASSEMBLING THE CODE ====

This can be achieved by simply opening the teminal, and doing a copy/paste of the commands listed on the ‘driver.c’ file, lines 15 thru 18. Make sure to compile them in order for the sake of continuity.

``` (1) Compile driver.c file: gcc -c -Wall -m64 -std=c99 -l driver.lis -o driver.o driver.c (2) displayNum.asm assembler file: nasm -f elf64 -l displayNum.lis -o displayNum.o displayNum.asm (3) Link all files: gcc -m64 -o displayNum.out driver.o displayNum.o (4) Execute in 64-bit protected mode: ./displayNum.out 1234 (1) Compile driver.c file:                 gcc -c -Wall -m64 -std=c99 -l driver.lis -o driver.o driver.c (2) displayNum.asm assembler file:         nasm -f elf64 -l displayNum.lis -o displayNum.o displayNum.asm (3) Link all files:                        gcc -m64 -o displayNum.out driver.o displayNum.o (4) Execute in 64-bit protected mode:     ./displayNum.out ```

Be advised, that the commands to assemble the code is designed to run in 64-bit mode. If you are not running a 64-bit machine, the commands will most likely fail to assemble.

If you are running a Windows computer and would like to assemble the code, look here or here for information.

You will need to change the 64-bit registers to 32-bit registers in the “displayNum.asm” file, aswell as removing lines 41-55 and lines 106-120 respectively in order to run the program successfully.

## Java || Find The Prime, Perfect & All Known Divisors Of A Number Using A For, While & Do/While Loop

This program was designed to better understand how to use different loops which are available in Java, as well as more practice using objects with classes.

This program first asks the user to enter a non negative number. After it obtains a non negative integer from the user, the program determines if the user obtained number is a prime number or not, aswell as determining if the user obtained number is a perfect number or not. After it obtains its results, the program will display to the screen if the user inputted number is prime/perfect number or not. The program will also display a list of all the possible divisors of the user obtained number via stdout.

REQUIRED KNOWLEDGE FOR THIS PROGRAM

```Class Objects - How TO Use Constructors - What Are They? Do/While Loop While Loop For Loop Modulus Basic Math - Prime Numbers Basic Math - Perfect Numbers Basic Math - Divisors ```

``` Is It Prime or Perfect? List All Possible Divisors Java import java.util.Scanner; public class PrimePerfectNums { // global variable declaration int userInput = 0; static Scanner cin = new Scanner(System.in); public PrimePerfectNums(int input) {// this is the constructor // give the global variable a value userInput = input; }// end of PrimePerfectNums public void CalcPrimePerfect() { // declare variables int divisor = 0; int sumOfDivisors = 0; System.out.print("nInput number: " + userInput); // for loop adds sum of all possible divisors for(int counter=1; counter <= userInput; ++counter) { divisor = (userInput % counter); if(divisor == 0) { // this will repeatedly add the found divisors together sumOfDivisors += counter; } } System.out.println(""); // uses the 'sumOfDivisors' variable from ^ above for loop to // check if 'userInput' is prime if(userInput == (sumOfDivisors - 1)) { System.out.print(userInput + " is a prime number."); } else { System.out.print(userInput + " is not a prime number."); } System.out.println(""); // uses the 'sumOfDivisors' variable from ^ above for loop to // check if 'userInput' is a perfect number if (userInput == (sumOfDivisors - userInput)) { System.out.print(userInput + " is a perfect number."); } else { System.out.print(userInput + " is not a perfect number."); } System.out.print("nDivisors of " + userInput + " are: "); // for loop lists all the possible divisors for the // 'userInput' variable by using the modulus operator for(int counter=1; counter <= userInput; ++counter) { divisor = (userInput % counter); if(divisor == 0 && counter !=userInput) { System.out.print(counter + ", "); } } System.out.print("and " + userInput); }// end of CalcPrimePerfect public static void main(String[] args) { // declare variables int input = 0; char response ='n'; do{ // this is the start of the do/while loop System.out.print("Enter a number: "); input = cin.nextInt(); // if the user inputs a negative number, do this code while(input < 0) { System.out.print("ntSorry, but the number entered is less " + "than the allowable limit.ntPlease try again....."); System.out.print("nnEnter an number: "); input = cin.nextInt(); } // entry point to class declaration PrimePerfectNums myClass = new PrimePerfectNums(input); // function call to obtain data using the number // which was passed from main to the constructor myClass.CalcPrimePerfect(); // asks user if they want to enter new data System.out.print("nntDo you want to input another number?(Y/N): "); response = cin.next().toLowerCase().charAt(0); System.out.println("---------------------------" + "---------------------------------"); }while(response =='y'); // ^ End of the do/while loop. As long as the user chooses // 'Y' the loop will keep going. // It stops when the user chooses the letter 'N' System.out.println("BYE!"); }// end of main }// http://programmingnotes.org/ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 import java.util.Scanner; public class PrimePerfectNums{ // global variable declaration int userInput = 0; static Scanner cin = new Scanner(System.in); public PrimePerfectNums(int input) {// this is the constructor // give the global variable a value userInput = input;  }// end of PrimePerfectNums public void CalcPrimePerfect() { // declare variables int divisor = 0; int sumOfDivisors = 0; System.out.print("nInput number: " + userInput); // for loop adds sum of all possible divisors for(int counter=1; counter <= userInput; ++counter) { divisor = (userInput % counter); if(divisor == 0) { // this will repeatedly add the found divisors together sumOfDivisors += counter; } } System.out.println(""); // uses the 'sumOfDivisors' variable from ^ above for loop to // check if 'userInput' is prime if(userInput == (sumOfDivisors - 1)) { System.out.print(userInput + " is a prime number."); } else { System.out.print(userInput + " is not a prime number."); } System.out.println(""); // uses the 'sumOfDivisors' variable from ^ above for loop to // check if 'userInput' is a perfect number if (userInput == (sumOfDivisors - userInput)) { System.out.print(userInput + " is a perfect number."); } else { System.out.print(userInput + " is not a perfect number."); } System.out.print("nDivisors of " + userInput + " are: "); // for loop lists all the possible divisors for the // 'userInput' variable by using the modulus operator for(int counter=1; counter <= userInput; ++counter) { divisor = (userInput % counter); if(divisor == 0 && counter !=userInput) { System.out.print(counter + ", "); } } System.out.print("and " + userInput); }// end of CalcPrimePerfect public static void main(String[] args) { // declare variables int input = 0; char response ='n'; do{ // this is the start of the do/while loop System.out.print("Enter a number: "); input = cin.nextInt(); // if the user inputs a negative number, do this code while(input < 0) { System.out.print("ntSorry, but the number entered is less " + "than the allowable limit.ntPlease try again....."); System.out.print("nnEnter an number: "); input = cin.nextInt(); } // entry point to class declaration PrimePerfectNums myClass = new PrimePerfectNums(input); // function call to obtain data using the number // which was passed from main to the constructor myClass.CalcPrimePerfect(); // asks user if they want to enter new data System.out.print("nntDo you want to input another number?(Y/N): "); response = cin.next().toLowerCase().charAt(0); System.out.println("---------------------------" + "---------------------------------"); }while(response =='y'); // ^ End of the do/while loop. As long as the user chooses // 'Y' the loop will keep going. // It stops when the user chooses the letter 'N' System.out.println("BYE!"); }// end of main }// http://programmingnotes.org/ ```

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.

Once compiled, you should get this as your output:

`Enter a number: 41`

``` Input number: 41 41 is a prime number. 41 is not a perfect number. Divisors of 41 are: 1, and 41 Do you want to input another number?(Y/N): y ------------------------------------------------------------ Enter a number: 496 Input number: 496 496 is not a prime number. 496 is a perfect number. Divisors of 496 are: 1, 2, 4, 8, 16, 31, 62, 124, 248, and 496 Do you want to input another number?(Y/N): y ------------------------------------------------------------ Enter a number: 1858 Input number: 1858 1858 is not a prime number. 1858 is not a perfect number. Divisors of 1858 are: 1, 2, 929, and 1858 Do you want to input another number?(Y/N): y ------------------------------------------------------------ Enter a number: -9 Sorry, but the number entered is less than the allowable limit. Please try again..... Enter an number: 12 Input number: 12 12 is not a prime number. 12 is not a perfect number. Divisors of 12 are: 1, 2, 3, 4, 6, and 12 ```

``` Do you want to input another number?(Y/N): n ------------------------------------------------------------ BYE! ```

## Java || Find The Average Using an Array – Omit Highest And Lowest Scores

This page will consist of two programs which calculates the average of a specific amount of numbers using an array.

REQUIRED KNOWLEDGE FOR BOTH PROGRAMS

```Double Data Type Final Variables Arrays For Loops Assignment Operators Basic Math - How To Find The Average ```

====== FIND THE AVERAGE USING AN ARRAY ======

The first program is fairly simple, and it was used to introduce the array concept. The program prompts the user to enter the total amount of numbers they want to find the average for, then the program displays the answer to them via stdout.

``` #1 - Find The Average Java import java.util.Scanner; public class FindTheAverage { // global variable declaration static Scanner cin = new Scanner(System.in); public static void main(String[] args) { // declare variables int numElems = 0; double sum = 0; double[] average = new double[100]; // declare array which has the ability to hold 100 elements // display message to screen System.out.println("Welcome to My Programming Notes' Java Program.n"); // determine how many numbers the user wants in the array System.out.print("How many numbers do you want to find the average for?: "); numElems = cin.nextInt(); System.out.println(""); // user enters data into array using a for loop // you can also use a while loop, but for loops are more common // when dealing with arrays for(int index=0; index < numElems; ++index) { System.out.print("Enter value #" +(index+1)+ ": "); average[index] = cin.nextDouble(); sum += average[index]; } // find the average. // Note: the expression below literally // means: sum = sum / numElems; sum /= numElems; System.out.println("nThe average of the " + numElems + " numbers is " + sum); }// end of main }// http://programmingnotes.org/ 1234567891011121314151617181920212223242526272829303132333435363738394041 import java.util.Scanner; public class FindTheAverage{ // global variable declaration static Scanner cin = new Scanner(System.in); public static void main(String[] args) { // declare variables int numElems = 0; double sum = 0; double[] average = new double[100]; // declare array which has the ability to hold 100 elements // display message to screen System.out.println("Welcome to My Programming Notes' Java Program.n"); // determine how many numbers the user wants in the array System.out.print("How many numbers do you want to find the average for?: "); numElems = cin.nextInt(); System.out.println(""); // user enters data into array using a for loop // you can also use a while loop, but for loops are more common // when dealing with arrays for(int index=0; index < numElems; ++index) { System.out.print("Enter value #" +(index+1)+ ": "); average[index] = cin.nextDouble(); sum += average[index]; } // find the average. // Note: the expression below literally // means: sum = sum / numElems; sum /= numElems; System.out.println("nThe average of the " + numElems + " numbers is " + sum); }// end of main}// http://programmingnotes.org/ ```

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

ARRAY
Notice the array declaration on line #13. The type of array being used in this program is a dynamic array, which has the ability to store up to 100 integer elements in the array. You can change the number of elements its able to store to a higher or lower number if you wish.

FOR LOOP
Lines 27-32 contains a for loop, which is used to actually store the data inside of the array. Without some type of loop, it is virtually impossible for the user to input data into the array; that is, unless you want to add 100 different println statements into your code asking the user to input data. Line 31 uses the assignment operator “+=” which gives us a running total of the data that is being inputted into the array. Note the loop only stores as many elements as the user so desires, so if the user only wants to input 3 numbers into the array, the for loop will only execute 3 times.

Once compiled, you should get this as your output:

`Welcome to My Programming Notes' Java Program.`

``` ```

```How many numbers do you want to find the average for?: 4 Enter value #1: 21 Enter value #2: 24 Enter value #3: 19 Enter value #4: 17 The average of the 4 numbers is 20.25 ```

====== FIND THE AVERAGE – OMIT HIGHEST AND LOWEST SCORES ======

The second program is really practical in a real world setting. We were asked to create a program for a fictional competition which had 6 judges. The 6 judges each gave a score of the performance for a competitor in a competition, (i.e a score of 1-10), and we were asked to find the average of those scores, omitting the highest/lowest results. The program was to store the scores into an array, display the scores back to the user via stdout, display the highest and lowest scores among the 6 obtained, display the average of the 6 scores, and finally display the average adjusted scores omitting the highest and lowest result.

``` #2 - Find The Average Omitting The Highest/Lowest Score Java import java.util.Scanner; public class FindOmittedAverage { // global variable declaration static Scanner cin = new Scanner(System.in); static final int NUM_JUDGES = 6; public static void main(String[] args) { // declare variables double highestScore = -999999; double lowestScore = 999999; double sumOfScores = 0; double avgScores = 0; double[] scores = new double[NUM_JUDGES]; // array is initialized using a final variable // display message to screen System.out.println("Welcome to My Programming Notes' Java Program.n"); System.out.print("Judges, enter one score each for the current competitor: "); // use a for loop to obtain data from user using the final variable for(int index=0; index < NUM_JUDGES; ++index) { // this puts data into the current array index scores[index] = cin.nextDouble(); // this calculates a running total of all the scores // adding each element in the array together sumOfScores += scores[index]; // if current score in the array index is bigger than the current 'highestScore' // value, then set 'highestScore' equal to the current value in the array if(scores[index] > highestScore) { highestScore = scores[index]; } // if current score in the array index is smaller than the current 'lowestScore' // value, then set 'lowestScore' equal to the current value in the array if(lowestScore > scores[index]) { lowestScore = scores[index]; } } System.out.print("nThese are the scores from the " + NUM_JUDGES + " judges: "); // use another for loop to redisplay the data back to the user via stdout for(int index=0; index < NUM_JUDGES; ++index) { System.out.print("nThe score for judge #"+(index+1)+" is: "+scores[index]); } // display the highest/lowest numbers to the screen System.out.print("nnThese are the highest and lowest scores: "); System.out.print("ntHighest: "+ highestScore); System.out.print("ntLowest: "+ lowestScore); // find the average avgScores = sumOfScores/NUM_JUDGES; System.out.print("nThe average score is: "+ avgScores); // reset data back to 0 so we can find the ommitted average sumOfScores = 0; avgScores = 0; System.out.print("nThe average adjusted score omitting the highest and lowest result is: "); // final loop, which calculates a running total, adding each element // in the array together, this time omitting the highest/lowest scores for(int index=0; index < NUM_JUDGES; ++index) { // IF(current score isnt equal to the highest elem) AND (current score isnt equal lowest elem) // THEN create a running total if((scores[index] != highestScore) && (scores[index] != lowestScore)) { sumOfScores += scores[index]; } } // find the average, minus the 2 scores avgScores = sumOfScores/(NUM_JUDGES-2); System.out.print(avgScores); }// end of main }// http://programmingnotes.org/ 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 import java.util.Scanner; public class FindOmittedAverage{ // global variable declaration static Scanner cin = new Scanner(System.in); static final int NUM_JUDGES = 6; public static void main(String[] args) { // declare variables double highestScore = -999999; double lowestScore = 999999; double sumOfScores = 0; double avgScores = 0; double[] scores = new double[NUM_JUDGES]; // array is initialized using a final variable // display message to screen System.out.println("Welcome to My Programming Notes' Java Program.n"); System.out.print("Judges, enter one score each for the current competitor: "); // use a for loop to obtain data from  user using the final variable for(int index=0; index < NUM_JUDGES; ++index) { // this puts data into the current array index scores[index] = cin.nextDouble(); // this calculates a running total of all the scores // adding each element in the array together sumOfScores += scores[index]; // if current score in the array index is bigger than the current 'highestScore' // value, then set 'highestScore' equal to the current value in the array if(scores[index] > highestScore) { highestScore = scores[index]; } // if current score in the array index is smaller than the current 'lowestScore' // value, then set 'lowestScore' equal to the current value in the array if(lowestScore > scores[index]) { lowestScore = scores[index]; } } System.out.print("nThese are the scores from the " + NUM_JUDGES + " judges: "); // use another for loop to redisplay the data back to the user via stdout for(int index=0; index < NUM_JUDGES; ++index) { System.out.print("nThe score for judge #"+(index+1)+" is: "+scores[index]); } // display the highest/lowest numbers to the screen System.out.print("nnThese are the highest and lowest scores: "); System.out.print("ntHighest: "+ highestScore); System.out.print("ntLowest: "+ lowestScore); // find the average avgScores = sumOfScores/NUM_JUDGES; System.out.print("nThe average score is: "+ avgScores); // reset data back to 0 so we can find the ommitted average sumOfScores = 0; avgScores = 0; System.out.print("nThe average adjusted score omitting the highest and lowest result is: "); // final loop, which calculates a running total, adding each element // in the array together, this time omitting the highest/lowest scores for(int index=0; index < NUM_JUDGES; ++index) { // IF(current score isnt equal to the highest elem) AND (current score isnt equal lowest elem) // THEN create a running total if((scores[index] != highestScore) && (scores[index] != lowestScore)) { sumOfScores += scores[index]; } } // find the average, minus the 2 scores avgScores = sumOfScores/(NUM_JUDGES-2); System.out.print(avgScores); }// end of main}// http://programmingnotes.org/ ```

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

FINAL
A final variable was declared and used to initialize the array (line 7). This was used to initialize the size of the array.

FOR LOOPS
Once again loops were used to traverse the array, as noted on lines 24, 51 and 73. The final variable was also used within the for loops, making it easier to modify the code if its necessary to reduce or increase the number of available judges.

HIGHEST/LOWEST SCORES
This is noted on lines 35-45, and it is really simple to understand the process once you see the code.

OMITTING HIGHEST/LOWEST SCORE
Lines 73-81 highlights this process. The loop basically traverses the array, skipping over the highest/lowest elements.

Once compiled, you should get this as your output

`Welcome to My Programming Notes' Java Program.`

``` Judges, enter one score each for the current competitor: 123 453 -789 2 23345 987 These are the scores from the 6 judges: The score for judge #1 is: 123.0 The score for judge #2 is: 453.0 The score for judge #3 is: -789.0 The score for judge #4 is: 2.0 The score for judge #5 is: 23345.0 The score for judge #6 is: 987.0 ```

```These are the highest and lowest scores: Highest: 23345.0 Lowest: -789.0 The average score is: 4020.1666666666665 The average adjusted score omitting the highest and lowest result is: 391.25 ```

## Java || Using If Statements, Char & String Variables

As previously mentioned, you can use the “int/float/double” data type to store numbers. But what if you want to store letters? Char and Strings help you do that.

===== SINGLE CHAR =====

This example will demonstrate a simple program using char, which checks to see if you entered the correctly predefined letter.

``` #1 - Guess a letter Java // ============================================================================ // Author: Kenneth Perkins // Date: Jan 4, 2012 // Updated: Mar 30, 2021 // Taken From: http://programmingnotes.org/ // File: GuessALetter.java // Description: Demonstrates using char variables // ============================================================================ import java.util.Scanner; public class GuessALetter { // global variable declaration static Scanner cin = new Scanner(System.in); public static void main(String[] args) { // declare variables char userInput = ' '; System.out.print("Please try to guess the letter I am thinking of: "); // get a single character from the user data input userInput = cin.next().charAt(0); // Use an If Statement to check equality if (userInput == 'a' || userInput == 'A') { System.out.println("You have Guessed correctly!"); } else { System.out.println("Sorry, that was not the correct letter I was thinking of"); } }// end main }// http://programmingnotes.org/ 1234567891011121314151617181920212223242526272829303132333435 // ============================================================================//    Author: Kenneth Perkins//    Date:   Jan 4, 2012//    Updated: Mar 30, 2021//    Taken From: http://programmingnotes.org///    File:  GuessALetter.java//    Description: Demonstrates using char variables// ============================================================================import java.util.Scanner; public class GuessALetter{    // global variable declaration    static Scanner cin = new Scanner(System.in);     public static void main(String[] args)    {        // declare variables        char userInput = ' ';         System.out.print("Please try to guess the letter I am thinking of: ");        // get a single character from the user data input        userInput = cin.next().charAt(0);         // Use an If Statement to check equality        if (userInput == 'a' || userInput == 'A')        {            System.out.println("You have Guessed correctly!");        }        else        {            System.out.println("Sorry, that was not the correct letter I was thinking of");        }    }// end main}// http://programmingnotes.org/ ```

Notice in line 19 I declare the char data type, naming it “userInput.” I also initialized it as an empty variable. In line 26 I used an “If/Else Statement” to determine if the user inputted value matches the predefined letter within the program. I also used the “OR” operator in line 26 to determine if the letter the user inputted was lower or uppercase. Try compiling the program simply using this
`if (userInput == 'a')` as your if statement, and notice the difference.

The resulting code should give this as output

```Please try to guess the letter I am thinking of: A You have Guessed correctly! ```

===== CHECK IF LETTER IS UPPER CASE =====

This example is similar to the previous one, and will check if a letter is uppercase

``` #2 - Is Input Uppercase? Java // ============================================================================ // Author: Kenneth Perkins // Date: Jan 4, 2012 // Updated: Mar 30, 2021 // Taken From: http://programmingnotes.org/ // File: CheckIfUppercase.java // Description: Demonstrates checking if a char variable is uppercase // ============================================================================ import java.util.Scanner; public class CheckIfUppercase { // global variable declaration static Scanner cin = new Scanner(System.in); public static void main(String[] args) { // declare variables char userInput = ' '; System.out.print("Please enter an UPPERCASE letter: "); // get a single character from the user data input userInput = cin.next().charAt(0); // Checks to see if inputted data falls between uppercase values if ((userInput >= 'A') && (userInput <= 'Z')) { System.out.println(userInput + " is an uppercase letter"); } else { System.out.println(userInput + " is not an uppercase letter"); } }// end main }// http://programmingnotes.org/ 1234567891011121314151617181920212223242526272829303132333435 // ============================================================================//    Author: Kenneth Perkins//    Date:   Jan 4, 2012//    Updated: Mar 30, 2021//    Taken From: http://programmingnotes.org///    File:  CheckIfUppercase.java//    Description: Demonstrates checking if a char variable is uppercase// ============================================================================import java.util.Scanner; public class CheckIfUppercase{    // global variable declaration    static Scanner cin = new Scanner(System.in);     public static void main(String[] args)    {        // declare variables        char userInput = ' ';         System.out.print("Please enter an UPPERCASE letter: ");        // get a single character from the user data input        userInput = cin.next().charAt(0);         // Checks to see if inputted data falls between uppercase values        if ((userInput >= 'A') && (userInput <= 'Z'))        {            System.out.println(userInput + " is an uppercase letter");        }        else        {            System.out.println(userInput + " is not an uppercase letter");        }    }// end main}// http://programmingnotes.org/ ```

Notice in line 26, an If statement was used, which checked to see if the user inputted data fell between letter A and letter Z. We did that by using the “AND” operator. So that IF statement is basically saying (in plain english)

`IF ('userInput' is equal to or greater than 'A') AND ('userInput' is equal to or less than 'Z')`

``` ```

`THEN it is an uppercase letter`

The resulting code should give this as output

```Please enter an UPPERCASE letter: p p is not an uppercase letter```

===== CHECK IF LETTER IS A VOWEL =====

This example will utilize more if statements, checking to see if the user inputted data is a vowel or not. This will be very similar to the previous example, utilizing the OR operator once again.

``` #3 - Is Input a Vowel? Java // ============================================================================ // Author: Kenneth Perkins // Date: Jan 4, 2012 // Updated: Mar 30, 2021 // Taken From: http://programmingnotes.org/ // File: CheckIfVowel.java // Description: Demonstrates checking if a char variable is a vowel // ============================================================================ import java.util.Scanner; public class CheckIfVowel { // global variable declaration static Scanner cin = new Scanner(System.in); public static void main(String[] args) { // declare variables char userInput = ' '; System.out.print("Please enter a vowel: "); // get a single character from the user data input userInput = cin.next().charAt(0); // Checks to see if entered data is A,E,I,O,U,Y if ((userInput == 'a')||(userInput == 'A')||(userInput == 'e')|| (userInput == 'E')||(userInput == 'i')||(userInput == 'I')|| (userInput == 'o')||(userInput == 'O')||(userInput == 'u')|| (userInput == 'U')||(userInput == 'y')||(userInput == 'Y')) { System.out.println("Correct, " + userInput + " is a vowel!"); } else { System.out.println("Sorry, " + userInput + " is not a vowel"); } }// end main }// http://programmingnotes.org/ 1234567891011121314151617181920212223242526272829303132333435363738 // ============================================================================//    Author: Kenneth Perkins//    Date:   Jan 4, 2012//    Updated: Mar 30, 2021//    Taken From: http://programmingnotes.org///    File:  CheckIfVowel.java//    Description: Demonstrates checking if a char variable is a vowel// ============================================================================import java.util.Scanner; public class CheckIfVowel{    // global variable declaration    static Scanner cin = new Scanner(System.in);     public static void main(String[] args)    {        // declare variables        char userInput = ' ';         System.out.print("Please enter a vowel: ");        // get a single character from the user data input        userInput = cin.next().charAt(0);          // Checks to see if entered data is A,E,I,O,U,Y         if ((userInput == 'a')||(userInput == 'A')||(userInput == 'e')||            (userInput == 'E')||(userInput == 'i')||(userInput == 'I')||            (userInput == 'o')||(userInput == 'O')||(userInput == 'u')||            (userInput == 'U')||(userInput == 'y')||(userInput == 'Y'))         {              System.out.println("Correct, " + userInput + " is a vowel!");         }         else         {              System.out.println("Sorry, " + userInput + " is not a vowel");         }    }// end main}// http://programmingnotes.org/ ```

This program should be very straight forward, and its basically checking to see if the user entered data is the letter A, E, I, O, U or Y.

The resulting code should give the following output

```Please enter a vowel: o Correct, o is a vowel!```

===== HELLO WORLD v2 =====

This last example will demonstrate using the string data type to print the line “Hello World!” to the screen.

``` #4 - Hello World - String Version Java // ============================================================================ // Author: Kenneth Perkins // Date: Jan 4, 2012 // Updated: Mar 30, 2021 // Taken From: http://programmingnotes.org/ // File: HelloWorldString.java // Description: Demonstrates using string variables // ============================================================================ import java.util.Scanner; public class HelloWorldString { // global variable declaration static Scanner cin = new Scanner(System.in); public static void main(String[] args) { // declare variables String userInput = ""; System.out.print("Please enter a sentence: "); // get a string from the user userInput = cin.nextLine(); // display message to user System.out.println("You entered: " + userInput); }// end main }// http://programmingnotes.org/ 12345678910111213141516171819202122232425262728 // ============================================================================//    Author: Kenneth Perkins//    Date:   Jan 4, 2012//    Updated: Mar 30, 2021//    Taken From: http://programmingnotes.org///    File:  HelloWorldString.java//    Description: Demonstrates using string variables// ============================================================================import java.util.Scanner; public class HelloWorldString{    // global variable declaration    static Scanner cin = new Scanner(System.in);     public static void main(String[] args)    {        // declare variables        String userInput = "";         System.out.print("Please enter a sentence: ");        // get a string from the user        userInput = cin.nextLine();         // display message to user        System.out.println("You entered: " + userInput);    }// end main}// http://programmingnotes.org/ ```

The resulting code should give following output

```Please enter a sentence: Hello World! You entered: Hello World!```

===== HOW TO COMPILE CODE USING THE TERMINAL =====

*** This can be achieved by typing the following command:
(Notice the .java source file is named exactly the same as the class header)

`javac YOUR_CLASS_NAME.java`

*** To run the compiled program, simply type this command:

` java YOUR_CLASS_NAME`

## C++ || Input/Output – Find The Average of The Numbers Contained In a Text File Using an Array/Bubble Sort

This program highlights more practice using text files and arrays. This program is very similar to one which was previously discussed on this site, but unlike that program, this implementation omits the highest/lowest values which are found within the array via a sort.

The previously discussed program works almost as well as the current implementation, but where it fails is when the data which is being entered into the program contains multiple values of the same type. For example, using the previously discussed method to obtain the average by omitting the highest/lowest entries found within an array, if the array contained the numbers:

`1, 2, 3, 3, 3, 2, 2, 1`

The previous implementation would mark 1 as being the lowest number (which is correct) and it would mark 3 as being the highest number (which is also correct). The area where it fails is when it omits the highest and lowest scores found within the array. The program will skip over ALL of the numbers contained within the array which equal to 1 and 3, thus resulting in the program obtaining the wrong answer.

To illustrate, before the previous program computes its adjusted average scores, it will not only omit just 1 and 3 from the array, but it will also omit all of the 1’s and 3’s from the list, resulting in our array looking like this:

`2, 2, 2`

When you are finding the average of a list of numbers by omitting the highest/lowest scores, you don’t want to omit ALL of the values which may equal said numbers, but merely just the highest (last element in the array) and lowest (first element in the array) scores.

So if the previous implementation has subtle issues, why is it on this site? The previous program illustrates very well the process of finding the highest/lowest integers found within an array. It also works flawlessly for data in which there is non repeating values found within a list (i.e 1,2,3,4,5,23,6). So if you know you are reading in from a file in which there are non repeating values, the previous implementation works well. Often times though, developers do not know what type of data the incoming files will contain, so this current implementation is a better way to go, especially if it is not known exactly how many numbers are contained within a file.

REQUIRED KNOWLEDGE FOR THIS PROGRAM

```Fstream Ifstream Ofstream Working With Files While Loops For Loops Bubble Sort Basic Math - Finding The Average```

The data file that is used in this example can be downloaded here.

Note: In order to read in the data .txt file, you need to save the .txt file in the same directory (or folder) as your .cpp file is saved in. If you are using Visual C++, this directory will be located in

`Documents > Visual Studio 2010 > Projects > [Your project name] > [Your project name]`

NOTE: On some compilers, you may have to add #include < cstdlib> in order for the code to compile.

``` Omit The Highest/Lowest Numbers In Array via Bubble Sort C++ #include <iostream> #include <fstream> using namespace std; // function prototype float FindOmittedAverage(int numbers[], int counter); int main() { // declare variables ifstream infile; ofstream outfile; float average=0; float sum =0; int highestNumber = -999999; int lowestNumber = 99999999; int numbers[100]; // open the input file in which you will read data from infile.open("INPUT_Numbers_ programmingnotes_freeweq_com.txt"); if(infile.fail()) { cout<<"nInput file not found!n"; exit(1); // there was an error, program exits } // open the output file in which the compiled data will be saved to outfile.open("OUTPUT_Averages_ programmingnotes_freeweq_com.txt"); if(outfile.fail()) { cout <<"There was an error creating the output file, press enter to terminate program."; exit(1); // there was an error, program exits } // display data to screen via cout cout <<"The numbers countained in the input file are: "; // saves data to the outfile. Notice the declaration to // save data to the outfile is the same as the ^ above cout // statment outfile <<"The numbers countained in the input file are: "; // incoming data from the file will be stored in an int array // so this counter will increment the array index every time the // program finds a new value inside the file to store inside the array int counter =0; // this while loop will read in data from the file until it reaches the end of the file // (i.e until there are no more number found within the file) // this process also stored the numbers inside the "numbers" array while(infile >> numbers[counter]) { // 'sum' variable adds the incoming numbers together // computing the sum sum += numbers[counter]; // finds the highest number contained within the incoming file if( numbers[counter] > highestNumber) { highestNumber = numbers[counter]; } // finds the lowest number contained within the incoming file if (numbers[counter] < lowestNumber) { lowestNumber = numbers[counter]; } // displays the currently found number from the file to stdout cout << numbers[counter] << ", "; // saves the currently found number from the file to the output file outfile << numbers[counter]<< ", "; ++counter; } // always close your file after your done using them infile.close(); // display the highest found number to stdout cout<< "nnThe highest and lowest numbers contained in the file are: nHighest: " << highestNumber<<"nLowest: "<<lowestNumber<<endl; // saves the highest found number to the output file outfile<< "nnThe highest and lowest numbers contained in the file are: nHighest: " << highestNumber<<"nLowest: "<<lowestNumber<<endl; // using the sum found from the above while loop, we compute the average average = sum/(counter); // display/save the average of the numbers which were contained in the // file to stdout and the output file cout<<"nThe average of the "<<counter<<" numbers contained in the file is: "<<average<<endl; outfile<<"nThe average of the "<<counter<<" numbers contained in the file is: "<<average<<endl; // function declaration which finds the omitted average of the found numbers // from the file average = FindOmittedAverage(numbers,counter); // display/save the omitted average of the numbers which were contained in the // file to stdout and the output file cout<<"nThe average of the "<<counter<<" numbers contained in the file omitting the highest and lowest scores is: "<<average<<endl; outfile<<"nThe average of the "<<counter<<" numbers contained in the file omitting the highest and lowest scores is: "<<average<<endl; // closes the outfile once we are done using it outfile.close(); return 0; } // function takes in the 'numbers' array, and 'counter' variable from // the main function as parameters, and computes the average, omitting // the highest and lowest numbers found within the array float FindOmittedAverage(int numbers[], int counter) { float sum = 0; float avg = 0; // this is a 'bubble sort' which will sort the numbers // contained within the array, from lowest to the highest // i.e (1,2,3,4,5,6,7,8) for(int iteration = 1; iteration < counter; iteration++) { for(int index = 0; index < counter - iteration; index++) { // if the previous value in the array is bigger than the next, then swap them if(numbers[index]> numbers[index+1]) { int temp = numbers[index]; numbers[index] = numbers[index+1]; numbers[index+1]= temp; } } }// end of sort // after the sorting is complete, set the highest // and lowest elements in the array to zero numbers[0]=0; numbers[counter-1]=0; // find the sum of the newly sorted array // with the highest and lowest entries being deleted (set to zero) for(int i = 0; i < counter; i++) { sum += numbers[i]; } // compute the average avg = sum / (counter-2); // return the average back to main return avg; }// http://programmingnotes.org/ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 #include <iostream>#include <fstream>using namespace std; // function prototypefloat FindOmittedAverage(int numbers[], int counter); int main(){ // declare variables ifstream infile; ofstream outfile; float average=0; float sum =0; int highestNumber = -999999; int lowestNumber = 99999999; int numbers[100];  // open the input file in which you will read data from infile.open("INPUT_Numbers_ programmingnotes_freeweq_com.txt"); if(infile.fail()) { cout<<"nInput file not found!n"; exit(1); // there was an error, program exits }  // open the output file in  which the compiled data will be saved to outfile.open("OUTPUT_Averages_ programmingnotes_freeweq_com.txt"); if(outfile.fail()) { cout <<"There was an error creating the output file, press enter to terminate program."; exit(1); // there was an error, program exits }   // display data to screen via cout cout <<"The numbers countained in the input file are: ";  // saves data to the outfile. Notice the declaration to // save data to the outfile is the same as the ^ above cout // statment outfile <<"The numbers countained in the input file are: ";  // incoming data from the file will be stored in an int array // so this counter will increment the array index every time the // program finds a new value inside the file to store inside the array int counter =0;  // this while loop will read in data from the file until it reaches the end of the file // (i.e until there are no more number found within the file) // this process also stored the numbers inside the "numbers" array while(infile >> numbers[counter]) { // 'sum' variable adds the incoming numbers together // computing the sum sum += numbers[counter];  // finds the highest number contained within the incoming file if( numbers[counter] > highestNumber) { highestNumber = numbers[counter]; }  // finds the lowest number contained within the incoming file if (numbers[counter] < lowestNumber) { lowestNumber = numbers[counter]; }  // displays the currently found number from the file to stdout cout << numbers[counter] << ", ";  // saves the currently found number from the file to the output file outfile << numbers[counter]<< ", "; ++counter; } // always close your file after your done using them infile.close();  // display the highest found number to stdout cout<< "nnThe highest and lowest numbers contained in the file are: nHighest: " << highestNumber<<"nLowest: "<<lowestNumber<<endl;  // saves the highest found number to the output file outfile<< "nnThe highest and lowest numbers contained in the file are: nHighest: " << highestNumber<<"nLowest: "<<lowestNumber<<endl;  // using the sum found from the above while loop, we compute the average average = sum/(counter);  // display/save the average of the numbers which were contained in the // file to stdout and the output file cout<<"nThe average of the "<<counter<<" numbers contained in the file is: "<<average<<endl; outfile<<"nThe average of the "<<counter<<" numbers contained in the file is: "<<average<<endl;  // function declaration which finds the omitted average of the found numbers // from the file average = FindOmittedAverage(numbers,counter);  // display/save the omitted average of the numbers which were contained in the // file to stdout and the output file cout<<"nThe average of the "<<counter<<" numbers contained in the file omitting the highest and lowest scores is: "<<average<<endl; outfile<<"nThe average of the "<<counter<<" numbers contained in the file omitting the highest and lowest scores is: "<<average<<endl;  // closes the outfile once we are done using it outfile.close();  return 0;} // function takes in the 'numbers' array, and 'counter' variable from// the main function as parameters, and computes the average, omitting // the highest and lowest numbers found within the arrayfloat FindOmittedAverage(int numbers[], int counter){ float sum = 0; float avg = 0;  // this is a 'bubble sort' which will sort the numbers // contained within the array, from lowest to the highest // i.e (1,2,3,4,5,6,7,8) for(int iteration = 1; iteration < counter; iteration++) { for(int index = 0; index < counter - iteration; index++) { // if the previous value in the array is bigger than the next, then swap them if(numbers[index]> numbers[index+1]) { int temp = numbers[index]; numbers[index] = numbers[index+1]; numbers[index+1]= temp; } } }// end of sort  // after the sorting is complete, set the highest // and lowest elements in the array to zero numbers[0]=0; numbers[counter-1]=0;  // find the sum of the newly sorted array // with the highest and lowest entries being deleted (set to zero) for(int i = 0; i < counter; i++) { sum += numbers[i]; }  // compute the average avg = sum / (counter-2);  // return the average back to main return avg;}// http://programmingnotes.org/ ```

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.

Once compiled, you should get this as your output
(Remember to include the input file)

```The numbers countained in the input file are: 12, 45, 23, 46, 11, -5, 23, 33, 50, 17, 13, 25, 15, 50, The highest and lowest numbers contained in the file are: Highest: 50 Lowest: -5```

``` ```

```The average of the 14 numbers contained in the file is: 25.5714 The average of the 14 numbers contained in the file omitting the highest and lowest scores is: 26.0833```

## C++ || Input/Output Text File Manipulation – Find Highest, Lowest, Average & Total Sum

This is a program which will utilize fstream, specifically ifstream and ofstream, to read in data from one .txt file, and it will then output selected data into an entirely new separate .txt file.

The input data file has 8 different rows, with each row containing 7 numbers on each line. The program will take in each line one at a time, manipulating the 7 numbers to receive the desired output. This program will find the highest/lowest number in each selected line, along with the total sum of all the numbers contained in that line, and the average of all the numbers. So at the end of the program, There will be 8 different sets of data compiled for each row, with the output file looking like this:

`SAMPLE RUN:`

``` - Input File - 3 5 7 3 4 5 6 ```

```- Output File - The dataset for input line #1 is: 3 5 7 3 4 5 6 The highest number is: 7 The lowest number is: 3 The total of the numbers is: 33 The average of the numbers is: 4.71```

The data file that is used in this example can be downloaded here

Note: In order to read in the data .txt file, you need to save the .txt file in the same directory (or folder) as your .cpp file is saved in. If you are using Visual C++, this directory will be located in

`Documents > Visual Studio > Projects > [Your project name] > [Your project name]`

NOTE: On some compilers, you may have to add #include < cstdlib> in order for the code to compile.

``` Text File Manipulation C++ // ============================================================================ // Author: Kenneth Perkins // Date: Jan 6, 2012 // Taken From: http://programmingnotes.org/ // File: fileInput.cpp // Description: Demonstrates how to read and write data to a file // ============================================================================ #include <iostream> #include <fstream> using namespace std; int main () { // declare variables ifstream infile; ofstream outfile; int inputNumber = 0; int highestNum = -999999; int lowestNum = 999999; double sum = 0; double average = 0; int currentLineNum = 1; // This opens the input file infile.open("INPUT_programmingnotes_freeweq_com.txt"); if(infile.fail()) //there was an error on open, file not found { cout << "Cannot find input file, press enter to terminate program." << endl; exit (1); // there was an error, program exits } // This opens the output file outfile.open("OUTPUT_programmingnotes_freeweq_com.txt", ios::app); if(outfile.fail()) { cout <<"There was an error opening the output file, press enter to terminate program."; exit(1); // there was an error, program exits } do { cout << "The dataset for input line #" << currentLineNum << " is: "; outfile << "The dataset for input line #" << currentLineNum << " is: "; // loops thru file until we get to the last number // from the selected line // (theres 7 numbers total in each line, see input file for clarification) for(int counter = 1; counter <= 7; counter++) { infile >> inputNumber; sum += inputNumber; // calculates the total sum of #'s for each line // checks to see which number is highest/lowest from // each selected line if(inputNumber > highestNum) { highestNum = inputNumber; } if(inputNumber < lowestNum) { lowestNum = inputNumber; } // displays current number to output screen // and saves to file cout << inputNumber << "\t"; outfile << inputNumber << "\t"; }// end for loop average = sum / 7; // finds the total avg for each line // this displays data to the output screen cout << endl; cout << "The highest number is: " << highestNum << endl; cout << "The lowest number is: " << lowestNum << endl; cout << "The total of the numbers is: " << sum << endl; cout << "The average of the numbers is: " << average << endl; // outfile section here, saves data to file outfile << endl; outfile << "The highest number is: " << highestNum << endl; outfile << "The lowest number is: " << lowestNum << endl; outfile << "The total of the numbers is: " << sum << endl; outfile << "The average of the numbers is: " << average << endl << endl; // outfile section end // resets variables back to default values highestNum = -999999; lowestNum = 999999; sum = 0; average = 0; currentLineNum++; // places data on new line cout << endl << endl; } while(!infile.eof()); // loop stops once it reaches the end of file cout << endl << endl <<"\tWe have reached the end of the file!"<< endl; outfile << endl << endl <<"\tWe have reached the end of the file!"<< endl << endl; outfile.close(); // closes outfile infile.close(); // closes infile return 0; }// http://programmingnotes.org/ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 // ============================================================================//    Author: Kenneth Perkins//    Date:   Jan 6, 2012//    Taken From: http://programmingnotes.org///    File:  fileInput.cpp//    Description: Demonstrates how to read and write data to a file// ============================================================================#include <iostream>#include <fstream>using namespace std; int main (){   // declare variables    ifstream infile;    ofstream outfile;    int inputNumber = 0;    int highestNum = -999999;    int lowestNum = 999999;    double sum = 0;    double average = 0;    int currentLineNum = 1;              // This opens the input file    infile.open("INPUT_programmingnotes_freeweq_com.txt");    if(infile.fail()) //there was an error on open, file not found    {        cout << "Cannot find input file, press enter to terminate program." << endl;        exit (1); // there was an error, program exits    }     // This opens the output file    outfile.open("OUTPUT_programmingnotes_freeweq_com.txt", ios::app);    if(outfile.fail())    {        cout <<"There was an error opening the output file, press enter to terminate program.";        exit(1); // there was an error, program exits    }     do {        cout << "The dataset for input line #" << currentLineNum << " is: ";        outfile << "The dataset for input line #" << currentLineNum << " is: ";         // loops thru file until we get to the last number         // from the selected line         // (theres 7 numbers total in each line, see input file for clarification)        for(int counter = 1; counter <= 7; counter++)        {               infile >> inputNumber;             sum += inputNumber;  // calculates the total sum of #'s for each line             // checks to see which number is highest/lowest from             // each selected line            if(inputNumber > highestNum)            {                highestNum = inputNumber;            }             if(inputNumber < lowestNum)            {                lowestNum = inputNumber;            }             // displays current number to output screen            // and saves to file            cout << inputNumber << "\t";            outfile << inputNumber << "\t";        }// end for loop         average = sum / 7; // finds the total avg for each line         // this displays data to the output screen        cout << endl;        cout << "The highest number is: " << highestNum << endl;        cout << "The lowest number is: " << lowestNum << endl;        cout << "The total of the numbers is: " << sum << endl;        cout << "The average of the numbers is: " << average << endl;         // outfile section here, saves data to file        outfile << endl;        outfile << "The highest number is: " << highestNum << endl;        outfile << "The lowest number is: " << lowestNum << endl;        outfile << "The total of the numbers is: " << sum << endl;        outfile << "The average of the numbers is: " << average << endl << endl;        // outfile section end         // resets variables back to default values        highestNum = -999999;        lowestNum = 999999;        sum = 0;        average = 0;        currentLineNum++;         // places data on new line        cout << endl << endl;         } while(!infile.eof()); // loop stops once it reaches the end of file        cout << endl << endl <<"\tWe have reached the end of the file!"<< endl;    outfile << endl << endl <<"\tWe have reached the end of the file!"<< endl << endl;    outfile.close();  // closes outfile    infile.close();        // closes infile     return 0;}// http://programmingnotes.org/ ```

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

LOOPS
This program utilizes one do/while loop on lines 39-97 which loops thru the input file until it reaches the end of the file. This program also uses a for loop, which is noted on line 46.

CALCULATING THE SUM
Line 50 contains the assignment operator “+=“, which will calculate a running total for all the values of each selected line.

This is noted in line 48, and works just like a cin statement.

OPENING FILES
File declarations, and the opening of files are highlighted on lines: 14-15, 24-25, 32-33. On line 32, the term “ios::app” means the file will append new data to the text file, instead of overwriting the old data contained within that file.

OUTPUT DATA TO FILE
This is highlighted on lines 80-84, and as you can see, the output statements are exactly the same as cout statements.

CLOSE FILES
Remember to close the files you open, as highlighted on lines 101 and 102.

Once compiling the above code, you should receive this as your output (for the 8 selected lines contained within the input text file)

```The dataset for input line #1 is: 346 130 982 90 656 117 595 The highest number is: 982 The lowest number is: 90 The total of the numbers is: 2916 The average of the numbers is: 416.571```

``` The dataset for input line #2 is: 415 948 126 4 558 571 87 The highest number is: 948 The lowest number is: 4 The total of the numbers is: 2709 The average of the numbers is: 387 The dataset for input line #3 is: 42 360 412 721 463 47 119 The highest number is: 721 The lowest number is: 42 The total of the numbers is: 2164 The average of the numbers is: 309.143 The dataset for input line #4 is: 441 190 985 214 509 2 571 The highest number is: 985 The lowest number is: 2 The total of the numbers is: 2912 The average of the numbers is: 416 The dataset for input line #5 is: 77 81 681 651 995 93 74 The highest number is: 995 The lowest number is: 74 The total of the numbers is: 2652 The average of the numbers is: 378.857 The dataset for input line #6 is: 310 9 995 561 92 14 288 The highest number is: 995 The lowest number is: 9 The total of the numbers is: 2269 The average of the numbers is: 324.143 The dataset for input line #7 is: 466 664 892 8 766 34 639 The highest number is: 892 The lowest number is: 8 The total of the numbers is: 3469 The average of the numbers is: 495.571 The dataset for input line #8 is: 151 64 98 813 67 834 369 The highest number is: 834 The lowest number is: 64 The total of the numbers is: 2396 The average of the numbers is: 342.286 ```

` We have reached the end of the file!`