Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Visual C++] Cчитываются две символьные строки, в массивы,а затем поэлементно складывают 
:(
    Опции темы
pharrell
Дата 27.11.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Помогите исправить код:считываются две символьные строки в массивы,а затем поэлементно складываются.Выводит какието непонятные числа.Посмотрите пожалуйста,заранее Спасибо.
Код

#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxlen 400
#define resultat 500


int read_num(int ar[])
{
        char  s[maxlen],ch,*p=s;
        int    b=0;
        do{
          ch=getchar();
          if(ch>='0' && ch<='9') 
            {
             ar[p-s]=(ch-'0');
             *(p++)=ch;
             b++;
             }
          }
        while(ch>='0' && ch<='9');
        *p=0;
        printf("%d\n",strlen(s));
        return b;
}


void write_num(int ar[],int size)
{
    int i;
    for(i=0;i<=size;i++)
    {
        printf("%d",ar[i]);
    }
    printf("\n");

}

void main(void)
{
     int a,b;
     int i,j,k;
     int num_1[maxlen];
     int num_2[maxlen];
     int res[resultat];
     int flag=0;
     int tmp=0;
     int size_res=0;
     a=read_num(num_1);
     write_num(num_1,a-1);
     printf("\n\n\n");
     b=read_num(num_2);
     write_num(num_2,b-1);


//_______________________________________
     if(a>b)
     {
         for(i=0,j=0;i<=a,j<=b;i++,j++)
         {
             for(k=0;k<=a+1;k++)
             {
                 tmp=num_1[i]+num_2[j]+flag;
                 if(tmp<10)
                 {
                     res[k]=tmp;
                 }
                 else
                 {
                     res[k]=tmp-10;
                     flag=1;
                 }
                 size_res++;

             }
         }
     }
     printf("\n\n\n");
     for(k=0;k<=size_res-1;k++)
     {
         printf("%d",res[k]);
     }
}



Это сообщение отредактировал(а) pharrell - 27.11.2006, 14:03
PM MAIL   Вверх
JackYF
Дата 27.11.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Почему ты считываешь в массивы char'ов( это нормально ), а внешние переменные - массивы int'ов?
В частности в функциях read_num и write_num должны быть
char ar[], а не int ar[].

Соответственно поменяй типы и в основной программе.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
pharrell
Дата 27.11.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Вообще я хотел считать строку в массив целых чисел.Ну а если поменять int на char,то результата тоже нет

PM MAIL   Вверх
JackYF
Дата 27.11.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



И printf("%c",res[k]);

Иначе printf пытается преобразовать все, что бы ты ему там не подал, в длинное целое.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 27.11.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Тогда уж
Код

printf("%c", res[k] + '0');
(для данной задачи)


--------------------
PM MAIL ICQ Skype   Вверх
sergejzr
Дата 27.11.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Alexeis
Дата 27.11.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 23
Всего: 459




M
alexeis1
Модератор: Название темы должно отражать ее суть!



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
pharrell
Дата 29.11.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.6.2006

Репутация: нет
Всего: нет



Вот наворотил тут и не работаетюНикак не могу понять в чем ошибкаюПомогите пожалуйста.Заранее спасиб
Код

#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxlen 400
#define result 500


int read_num(int ar[])
{
        char  ch;
        int    i=0;
        do{
          ch=getchar();
          if(ch>='0' && ch<='9') 
            {
              ar[i]=(ch-'0');
             }
          i++;
          }
        while(ch>='0' && ch<='9');

        printf("%d\n",i-1);
        return i-1;
}

void write_num(int ar[],int size)
{
    int i;
    for(i=0;i<size;i++)
    {
        printf("%d",ar[i]);
    }
    printf("\n");

}
void null(int ar[],int len)
{
    int i;
    for(i=0;i<=len;i++)
    {
        ar[i]=0;
    }
}

void main(void)
{
     int a,b,h=0;
     int i,j=0,k;
     int num_1[maxlen];
     int num_2[maxlen];
     int res[result];
     int flag;
     int tmp=0;
     null(num_1,maxlen);
     null(num_2,maxlen);
     null(res,maxlen+1);
     a=read_num(num_1);
     write_num(num_1,a);
     printf("\n\n\n");
     b=read_num(num_2);
     write_num(num_2,b);


//_______________________________________

     if(a>=b)
     {
         flag=0;
         for(i=a,j=b;i>=0,j>=0,k>=0;i--,j--,k--)
         {
        
             
                 tmp=num_1[i]+num_2[j]+flag;
                 if(tmp<10)
                 {
                     res[k]=tmp;
                 }
                 else
                 {
                     res[k]=tmp-10;
                     flag=1;
                 }
                 h++;

         }
     }
     printf("\n\n\n");
     for(k=0;k<h;k++)
     {
         printf("%d",res[k]);
     }
     printf("\n");
}




M
alexeis1
Модератор: не забывайте указывать тип подсветки.


Это сообщение отредактировал(а) alexeis1 - 29.11.2006, 01:07
PM MAIL   Вверх
Dov
Дата 29.11.2006, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Код
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>

#define maxlen 400
#define result 500

int read_num(int ar[])
{
    char  ch;
    int   i = 0;

    while((ch=getchar()) >= '0' && ch <= '9')
        ar[i++]=(ch - '0');        
    
    printf("%d\n", i);

    return i;
}

void write_num(int ar[], int size)
{
    int i;
    for(i = 0; i < size; i++)
        printf("%d", ar[i]);    
}

void main(void)
{
    int a,b,h=0;
    int i,j=0,k=0;
    int num_1[maxlen]={0};
    int num_2[maxlen]={0};
    int res[result]  ={0};
    int flag;
    int tmp=0;

    a=read_num(num_1);
    write_num(num_1,a);
    printf("\n");
    b=read_num(num_2);
    write_num(num_2,b);
    
    
    //_______________________________________
    
    flag=0;
    for(i=a-1,j=b-1;(i >= j ? i : j) >= 0 ;i--,j--)
    {
        tmp=num_1[i]+num_2[j]+flag;
        if(tmp<10)
        {
            res[k++]=tmp;
        }
        else
        {
            res[k++]=tmp-10;
            flag=1;
            if((i >= j ? i : j) == 0)
            {
                res[k]=flag;
                h++;
            }
        }
        h++;            
    }
    printf("\n\n\n");
    for(k=h-1;k>=0;k--)
    {
        printf("%d",res[k]);
    }
    printf("\n");
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0605 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.