Форум программистов, компьютерный форум CyberForum.ru

Работа с длинными числами (непонятное поведение при выводе второго массива символов) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Установить ширину в dataGridView для всех столбцов в 35. http://www.cyberforum.ru/cpp-beginners/thread554512.html
В C# я знаю как сделать: for (int i = 0; i < 8; i++) { dataGridView1.Columns.Width = 30; } а в плюсах нет свойства Width , как по-другому осуществить?
C++ Сдвиг массива символов class G { public: char name; char maker; int num; int price; }; G A,B,C; G D; void third(){ int i; http://www.cyberforum.ru/cpp-beginners/thread554502.html
Перегрузка функции ввода C++
Добрый день.Подскажите как выводить объект-строку с пробелами в данном классе. #include <iostream> #include <fstream> #include<cstring> using namespace std; class base{ public: //char* str;
C++ Почему не выводит?
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные — в конец с сохранением порядка следования. Дополнительный массив заводить не разрешается. #include <iostream.h> #include <conio.h> int main() { int mass;
C++ Первое НЕ открытие .exe файла после компилятора http://www.cyberforum.ru/cpp-beginners/thread554493.html
Во многих учебниках предлагают вначале всегда простую программу вывода текста. Предлагают следующее: 1. Перепишите программу, сохраните её с расширением .cpp; 2. Произведите её компиляцию; (я пользуюсь компилятором Dev-C++ и C++Builder6) 3. Нажмите на автоматически созданный .exe файл получи результат "ТЕКСТ". Файл.EXE создается при нажатии возникает на долю секунды окно типа MS-DOS и...
C++ Перевести на C++ из Pascal Буду очень рад тому, кто переведет из Pascal на C++ :) procedure ChangeToInc(var st:string); var f:boolean; begin f:=true; //удовлетворяет ли шаблону while pos(' ',st) > 0 do delete(st,pos(' ',st)+1); //удаляем все имеющиеся пробелы if copy(st,length(st)-2,3) = '+1;' then delete(st,length(st)-2,3) else f:=false; //если хвост - '+1', то отсекаем if pos(':=',st)>0 then... подробнее

Показать сообщение отдельно
Mefodiy
1 / 1 / 0
Регистрация: 21.04.2012
Сообщений: 45
22.04.2012, 12:18     Работа с длинными числами (непонятное поведение при выводе второго массива символов)
Необходимо составить программу,которая будет работать с длинными числами.
Кратко опишу: записываем в программу цифры(в виде строки), после переносим их в конец массива для удобства выполнения мат. операций, потом вывожу введённые числа для проверки правильности.
Проблема заключается в том,что 2-й массив выводит неправильно: иногда может вывести все нолики, а иногда вначале ноли,а потом 1234567... Фишка в том,что если в подпрограмме Vivod в цикле поменять i=0(то есть,чтоб выводило все 300 элементов),то сами элементы,как и должно быть находятся в конце массива и выводится так: 00000000000.... и цифры которые я ввёл. В чем проблема?

ps как можно с помощью atoi приводить к виду int только заданный элемент в массиве(например str[299]). Надо для того,чтобы с конца соответствующие элементы складывать,то есть str[299]+str[299].
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void Vvod(char str[],int& index,int temp);
void Vivod(char str[],int& index,int temp);
void SwapToEnd(char str[],int& index);
void Reset(char str[],int& index);
//void Plus(char str1[],char str2[],char str3[],int temp);
void main(){
clrscr();
char strA[300],strB[300],strC[300];
int indexA,indexB,indexC,temp,n;
Vvod(strA,indexA,temp);
SwapToEnd(strA,indexA);
Reset(strA,indexA);
Vivod(strA,indexA,temp);
Vvod(strB,indexB,temp);
SwapToEnd(strB,indexB);
Reset(strB,indexB);
Vivod(strB,indexB,temp);
Reset(strC,indexC);
cout<<"indexA - "<<indexA<<"  indexB - "<<indexB;
getch();
}
void Vvod(char str[],int& index,int temp) {
    cout<<"\nVvodite zna4enie strsiva\n";
    cout<<"Key 'Enter' - konec vvoda\n";
    int i;
    index=0;
    for (i=0; i<300; i++) {
        temp=getch();
        if(temp==13){                           //  если нажат enter - конец ввода
            break;
        }
        str[i]=temp;
        index+=1;                               // кол-во введённых цифр
        cout<<temp-48<<"";                      // т.к. выводит код нажатой кнопки, то отнимаем 48,чтоб знать какую цифру нажали
    }
}
void Vivod(char str[],int& index,int temp) {
    cout<<endl;
    int i;
    temp=300-index;
    for(i=temp; i<300; i++)
        cout<<str[i]<<" ";
    cout<<endl;
    }
void SwapToEnd(char str[],int& index){
    int i,j=300;
    if(str[j]==str[index]);
    else {
        for(i=index;i>=0;i--){                  //Перемещение элементов в конец
            str[j]=str[i];
            j--;
        }
    }
}
void Reset(char str[],int& index){
    int i;
    for(i=0;i<300-index;i++) 
    str[i]=48;                                  //Обнуление элементов
}
/*void Plus(char str1[],char str2[],char str3[],int temp){
    int i;
    for(i=299;)
} */
Добавлено через 17 часов 37 минут
Никто не знает или всем лень разбираться в коде? Он вроде лёгкий, да и комменты есть.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru