Zadanie z C

19Radek88
Użytkownik
Użytkownik
Posty: 105
Rejestracja: 2 lis 2007, o 21:01
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 14 razy
Pomógł: 4 razy

Zadanie z C

Post autor: 19Radek88 »

Napisac program w C pobierajacy od uzytkownika liczbe naturalna, tworzacy tablice zlozona z cyfr tej liczby i na jej podstawie obliczajacy sume cyfr tej liczby.
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

Zadanie z C

Post autor: Szemek »

są jakieś ograniczenia dla długości tej liczby
19Radek88
Użytkownik
Użytkownik
Posty: 105
Rejestracja: 2 lis 2007, o 21:01
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 14 razy
Pomógł: 4 razy

Zadanie z C

Post autor: 19Radek88 »

Ano wlasnie nie
Papkin
Użytkownik
Użytkownik
Posty: 57
Rejestracja: 22 lip 2006, o 20:50
Płeć: Mężczyzna
Lokalizacja: Iława
Podziękował: 3 razy

Zadanie z C

Post autor: Papkin »

Przed Chwilą napisałem coś takiego. Ten program będzie sumał 2 liczby n razy
#include
#include
#include

using namespace std;

int main(void){
int n;
string liczba1, liczba2;
cin >> liczba1;
cin >> liczba2;
cin >> n;
for(int i=0;i= 0; i--)
s = 0; i--)
s = liczba2.size()? liczba1.size() : liczba2.size());

stringstream suma;
int pod, dod = 0;

for(int i = 0; i < max; i++){

if(liczba1.size() > i && liczba2.size() > i){
pod = (char)liczba1-48 + (char)liczba2-48;
}
else{
pod = (liczba1.size() > liczba2.size() ? (char)liczba1-48 : (char)liczba2-48);
}

pod+=dod;

if(pod > 9){
dod = 1;
suma
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Zadanie z C

Post autor: soku11 »

To mialo byc w C a nie w Cpp :) Ja to widze jakos tak:

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
  int liczba,x;
	int rozmiar,suma;
  char Cliczba[30];
	int *tab=NULL;

  printf("Podaj liczbe naturalna: ");
  if( scanf("%d",&liczba)==1)
    if(liczba>0)
    {
      sprintf(Cliczba, "%i", liczba); 
			rozmiar=strlen(Cliczba);
			tab=(int*)malloc(rozmiar * sizeof(int));
			if(tab)
			{
				suma=0;
				for(x=0;x<rozmiar;x++)
				{
					tab[x]=(int) (Cliczba[x]-'0');
					printf("%d: %d\n",x,tab[x]);
					suma+=tab[x];
				}
				printf("Suma: %d",suma);
			}
      return 0;
    }

  printf("Niepoprawne dane!\n");
	
  return 0;
}

Ja to widze jakos tak :P Na dwoch tablicach, zeby bylo estetycznie :) POZDRO
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Zadanie z C

Post autor: smiechowiec »

W sumie, aby liczba mogła być nieco większa niż int czy long może lepiej od razu użyć tablicy znaków ?

Kod: Zaznacz cały

#include <stdio.h>

int main() {
  char sliczba[80] = "";
  int i, isuma = 0;
  printf("Podaj liczbe do 80 znakow ");
  gets(sliczba);
  for(i = 0; sliczba[i]; i++)
    isuma += (sliczba[i] - '0');
  printf("Suma cyfr liczby %s wynosi %i", sliczba, isuma);
  return 0;
} 
Ostatnio zmieniony 15 sty 2008, o 00:12 przez smiechowiec, łącznie zmieniany 1 raz.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Zadanie z C

Post autor: soku11 »

Ja jeszcze proponuje uzywac fgets zamiast gets, bo fgets zapewni ze nie przepelnisz dostepnej tablicy A gets bierze i wczytuje caly czas nawet jak sie przepelni. POZDRO
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Zadanie z C

Post autor: smiechowiec »

fgets w porównaniu do gets ma jedną niemiłą własność, otóż dopisuje do łańcucha znak końca linii LF lub CR LF w zależności od systemu. W związku z tym trzeba ten dodatek czasem usunąć
Awatar użytkownika
Undre
Użytkownik
Użytkownik
Posty: 1430
Rejestracja: 15 lis 2004, o 02:05
Płeć: Mężczyzna
Lokalizacja:
Podziękował: 3 razy
Pomógł: 92 razy

Zadanie z C

Post autor: Undre »

Papkin pisze:Ten program będzie sumał 2 liczby n razy
to jakiś termin wędkarski ?
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Zadanie z C

Post autor: soku11 »

smiechowiec pisze:fgets w porównaniu do gets ma jedną niemiłą własność, otóż dopisuje do łańcucha znak końca linii LF lub CR LF w zależności od systemu. W związku z tym trzeba ten dodatek czasem usunąć
A no rzeczywiscie. Tego nie zauwazylem Zawsze mozna pokombinowac i usunac ten znaczek. POZDRO
Xitami

Zadanie z C

Post autor: Xitami »

19Radek88 pisze:Napisac program w C [...]

Kod: Zaznacz cały

#include <stdio.h>
19Radek88 pisze:[...]pobierajacy od uzytkownika liczbe naturalna[...]

Kod: Zaznacz cały

 int n; scanf("%d",&n);
19Radek88 pisze:[...]tworzacy tablice zlozona z cyfr tej liczby[...]

Kod: Zaznacz cały

char t[21]; int i=0;
while (n>0) {
    t[i++]=n%10+'0';
    n/=10; }
t[i]=\0;
19Radek88 pisze:[...]na jej podstawie obliczajacy sume cyfr tej liczby.

Kod: Zaznacz cały

suma=0;
i=0;
while (t[i])
    suma+=t[i++]-'0';
cozmo
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 4 sty 2008, o 19:09
Płeć: Mężczyzna
Lokalizacja: Milanówek
Podziękował: 1 raz
Pomógł: 3 razy

Zadanie z C

Post autor: cozmo »

Trik na rozłożenie liczby na cyfry polega na tym :
-pobierasz liczbe
-kopiujesz ja do innej zmiennej
-kopia=dzielisz kopie całkowicie przez 10 [ masz liczbę krotszą o ostatnią cyfrę ]
-dzielisz liczbe przez skrocona kopie i masz ostatnią cyfre do wpisania do tabeli i tak w kolko.

Ale jak juz sa wskazniki to faktycznie moze i ich uzycie bedzie prostsze.
Sorry jeżeli już ktoś tak podał.
ODPOWIEDZ